OpenSSL笔记-PKCS#1和PKCS#8的区别及分别调用的API
生活随笔
收集整理的這篇文章主要介紹了
OpenSSL笔记-PKCS#1和PKCS#8的区别及分别调用的API
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這玩意折騰了一天,有個老外的代碼,公鑰用了PKCS#1,私鑰用了PKCS#8。調用了不同的API,而我的全是生成的PKCS#8,后面查閱了大量資料和長時間調試程序,才發現了問題,在此記錄下。
用OpenSSL生成的pem文件,公私密鑰有兩種格式
公鑰是(PKCS#1):
-----BEGIN RSA PUBLIC KEY----- ******************************************* -----END RSA PUBLIC KEY-----和(PKCS#8)
-----BEGIN PUBLIC KEY----- ******************************************* -----END PUBLIC KEY-----私鑰是(PKCS#1):
-----BEGIN RSA PRIVATE KEY----- ******************************************* -----END RSA PRIVATE KEY-----總結下:在OpenSSL1.1.x版本中公鑰有RSA的PKCS#8、PKCS#1,私鑰只有PKCS#8標準,他們的區別如下:
PKCS#1:是標準RSA密鑰對規范,但都是裸奔的;
PKCS#8:是對加密后的密鑰進行了描述,也就是說P8格式的密鑰不是裸奔的。
PKCS#1,調用的API:
//生成RSA對象的 PEM_read_bio_RSA_PUBKEY();PKCS#8,調用的API:
//生成RSA對象的 PEM_read_bio_RSAPublicKey(); PEM_read_bio_RSAPrivateKey();關于加解密都是調用相同的4個函數:
/* next 4 return -1 on error */ int RSA_public_encrypt(int flen, const unsigned char *from,unsigned char *to, RSA *rsa, int padding); int RSA_private_encrypt(int flen, const unsigned char *from,unsigned char *to, RSA *rsa, int padding); int RSA_public_decrypt(int flen, const unsigned char *from,unsigned char *to, RSA *rsa, int padding); int RSA_private_decrypt(int flen, const unsigned char *from,unsigned char *to, RSA *rsa, int padding);有一點要提醒的,他們的返回值都是加密,解密后,數據的長度,因為是unsigned char類型,還是二進制的,所以這個返回值比較重要。
總結
以上是生活随笔為你收集整理的OpenSSL笔记-PKCS#1和PKCS#8的区别及分别调用的API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言自定义类型——位段
- 下一篇: unity天空盒渐变,Unity 3D从