为什么我能';使用PEM_read_RSAPublicKey读取openssl生成的RSA发布密钥?
我尝试读取openssl生成的RSA公钥,如下所示:为什么我能';使用PEM_read_RSAPublicKey读取openssl生成的RSA发布密钥?,c,encryption,openssl,rsa,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 然后我试着读: FILE *keyfile = fopen("somewhere.pub", "r"); RSA *rsa_pub = PEM_read_RSAPublicKey
Private Key:
openssl genrsa -out mykey.pem 1024
Public Key afterwards:
openssl rsa -in mykey.pem -pubout > somewhere.pub
然后我试着读:
FILE *keyfile = fopen("somewhere.pub", "r");
RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL);
//rsa_pub == NULL!
当我读取私钥时,它会工作
FILE *keyfile = fopen("mykey.pem", "r");
RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL);
//all good
有什么想法吗
我读过openssl生成RSA公钥的X509密钥。但我甚至无法加载X509 pub密钥
谢谢您可以尝试使用
PEM\u read\u RSA\u publickey()
而不是PEM\u read\u RSA publickey()
这都是关于格式的
openssl生成的默认公钥文件格式是PEM格式
PEM\u read\u RSA\u PUBKEY()
读取PEM格式PEM_read_RSAPublicKey()
读取PKCS#1格式
因此,如果您想坚持使用PEM_read_RSAPublicKey()
,您可以在生成公钥时指定-outform DER
选项,使用PKCS#1格式生成公钥文件
openssl rsa实用程序使用
函数PEM_write_bio_RSA_publickey而不是PEM_write_bio_RSA publickey。所以
如果希望程序与其输出兼容,则
应使用PEM_write_bio_RSA_PUBKEY和PEM_read_bio_RSA_PUBKEY用于
保存/加载公钥文件
rsa公钥似乎有两种格式,编码方式不同 A.RSA_公钥
RSA*rsaPubKey=PEM\u read\u bio\u RSA\u PUBKEY(bio,NULL,0,pass);
使用此格式阅读PUBKEY
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
产生于
$openssl rsa-in key.pri-pubout-out key.pub1
B.公共钥匙
RSA*rsaPubKey=PEM_read_bio_RSAPublicKey(bio,NULL,0,pass);
使用此格式读取公钥
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
产生于
$openssl rsa-in key.pri-RSAPublicKey\u out-out key.pub2
转换
A到B格式
$openssl rsa-in key.pub1-pubin-RSAPublicKey\u out-out key.pub2_
B到A格式
$openssl rsa-in key.pub2-RSAPublicKey\u in-pubout-out key.pub1_
我赞成编写一个解释,它远没有OpenSSL文档中提到的解释那么神秘。我使用-outform DER
生成公钥,但它仍然会产生分段错误。我想从内存而不是文件中读取公钥。我曾使用过PEM_read_bio_RSA_PUBKEY
,但不起作用。@mustafa.yavuz:由于这些问题似乎与这个特定问题无关,请将您的问题作为新问题提出。这个答案不正确且具有误导性。PEM_read_RSA_PUBKEY
和PEM_read_RSAPublicKey
read PEM格式,但前者需要SubjectPublicKeyInfo结构,而后者需要RSAPublicKey结构。前者由openssl命令行工具生成,以BEGIN公钥开始,后者以BEGIN RSA公钥开始。