1.PEM私鑰格式文件 pkcs1的格式於此相同 //PEM_read_RSAPrivateKey
-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
2. PKCS8私鑰格式 //pkcs8 長度為861(包含回車),主要應用於java
-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----
2. PEM公鑰格式文件 //讀取公鑰PEM,PUBKEY格式PEM使用PEM_read_RSA_PUBKEY函數
-----BEGIN PUBLIC KEY----- -----END PUBLIC KEY-----
3. PEM RSAPublicKey公鑰格式文件 //PEM_read_RSAPublicKey
-----BEGIN RSA PUBLIC KEY----- -----END RSA PUBLIC KEY-----
示例:
Private Key:
openssl genrsa -out mykey.pem 1024
Public Key afterwards:
openssl rsa -in mykey.pem -pubout > somewhere.pub
//以下read rsa_pub == NULL!
FILE *keyfile = fopen("somewhere.pub", "r");
RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL);
//以下read all good
FILE *keyfile = fopen("mykey.pem", "r");
RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL);
由於OpenSSL的生成默認的公鑰文件格式是PEM格式。
PEM_read_RSA_PUBKEY()讀取PEM格式。 PEM_read_RSAPublicKey()讀取PKCS# 1格式。
所以,如果你想堅持到 PEM_read_RSAPublicKey(),你可以通過指定 -outform使用PKCS#1格式生成公鑰文件生成公鑰時DER 選項。
指令執行過程:
生成PEM格式私鑰
$ openssl genrsa -out id_rsa_private 1024 # -out 指定生成文件,此文件包含公鑰和私鑰兩部分,所以即可以加密,也可以解密。 1024 生成密鑰的長度
生成私鑰(把RSA私鑰轉換成PKCS8格式)
$ openssl pkcs8 -topk8 -inform PEM -in id_rsa_private -outform pem -nocrypt -out id_rsa_private_pkcs
提取公鑰
$ openssl rsa -in id_rsa_private -pubout -out id_rsa_public.pub # -in 指定輸入的密鑰文件 -out 指定提取生成公鑰的文件(PEM公鑰格式)
提取PEM RSAPublicKey格式公鑰
$ openssl rsa -in id_rsa_private -RSAPublicKey_out -out id_rsa_public # -in 指定輸入的密鑰文件 -out 指定提取生成公鑰的文件(PEM RSAPublicKey格式)
生成的秘鑰文件:
$ cat id_rsa_private
$ cat id_rsa_private_pkcs
$ cat id_rsa_public.pub
$ cat id_rsa_public
pkcs#8 參數參考鏈接:https://www.cnblogs.com/aixiaoxiaoyu/articles/8856312.html
PEM_read_RSAPublicKey(fp, NULL, NULL, NULL)