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)