openssl -- RSA秘钥格式

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)
原文地址:https://www.cnblogs.com/ruigelwang/p/12693320.html