Jon*_*lli 16 c encryption openssl rsa
我正在尝试读取使用openssl生成的RSA公钥,如下所示:
Private Key:
openssl genrsa -out mykey.pem 1024
Public Key afterwards:
openssl rsa -in mykey.pem -pubout > somewhere.pub
Run Code Online (Sandbox Code Playgroud)
然后我试着读:
FILE *keyfile = fopen("somewhere.pub", "r");
RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL);
//rsa_pub == NULL!
Run Code Online (Sandbox Code Playgroud)
当我正在阅读私钥时,它可以工作
FILE *keyfile = fopen("mykey.pem", "r");
RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL);
//all good
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我已经读过openssl生成RSA公钥的X509密钥.但我甚至无法加载X509发布密钥.
谢谢
alk*_*alk 27
你可以试试PEM_read_RSA_PUBKEY()而不是PEM_read_RSAPublicKey().
这都是关于格式的.
openssl生成的默认公钥文件格式是PEM格式.
PEM_read_RSA_PUBKEY()读取PEM格式.PEM_read_RSAPublicKey()读取PKCS#1格式.
因此,如果您想坚持下去,PEM_read_RSAPublicKey()可以通过在生成公钥-outform DER时指定选项,使用PKCS#1格式生成公钥文件.
似乎有两种格式的 rsa 公钥,具有不同的编码。
RSA* rsaPubKey = PEM_read_bio_RSA_PUBKEY( bio, NULL, 0, pass ) ;
Run Code Online (Sandbox Code Playgroud)
PUBKEY用这种格式阅读
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
产生于
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
$ openssl rsa -in key.pri -pubout -out key.pub1
Run Code Online (Sandbox Code Playgroud)
PublicKey用这种格式阅读
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
产生于
RSA* rsaPubKey = PEM_read_bio_RSAPublicKey( bio, NULL, 0, pass ) ;
Run Code Online (Sandbox Code Playgroud)
A 到 B 格式
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
B 到 A 格式
$ openssl rsa -in key.pri -RSAPublicKey_out -out key.pub2
Run Code Online (Sandbox Code Playgroud)