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