用PEM_read_bio_RSAPublicKey读取公钥失败

lfisher 2009-02-18 09:28:40
先用openssl genrsa -out rsakey0.pem 1024
生成了私钥文件,然后在用openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem生成公钥文件

用VC开发加解密的程序:
私钥部分:
BIO *key=NULL;
RSA *r=NULL;
ERR_load_crypto_strings();
key=BIO_new(BIO_s_file());
BIO_read_filename(key,"rsakey0.pem");

r = PEM_read_bio_RSAPrivateKey(key,NULL,NULL,NULL);

正常!!

公钥部分:
BIO *key=NULL;
RSA *r=NULL;
ERR_load_crypto_strings();
key=BIO_new(BIO_s_file());
BIO_read_filename(key,"rsakey0-pub.pem");

r = PEM_read_bio_RSAPublicKey(key,NULL,NULL,NULL);

r返回为NULL.

百思不得其解,望高手指教!!!!!
...全文
6485 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
melochale 2012-09-27
  • 打赏
  • 举报
回复
对应的很工整是不是,你生成一个私钥,然后用它生成一个公钥。
openssl genrsa -out private.pem 1024
openssl rsa -in priv.pem -pubout -out public.pem
用任何一种方法打开私钥,读取私钥信息,得到RSA,查看RSA,ok,没有问题,一切都还看起来比较正常。
然后用任何一种方法打开公钥,读取公钥信息,问题出现了:RSA对象为空,你失败了。

通过openssl的手册和帮助,你会发现两个函数:
PEM_read_bio_RSA_PUBKEY()
PEM_read_RSA_PUBKEY()
他们才是你要找的对应的,而上面两个函数是从任何.h里面找不到的,但是他们的确是真实存在的符号连接,在对应的.o文件中用objdump可以查看到他们的符号,很诡异!
现象描述完了,还未探其究竟。
转自:http://blog.chinaunix.net/uid-233938-id-162630.html
bm425 2012-08-10
  • 打赏
  • 举报
回复
没看懂,还是没办法
nicky_yangke 2012-05-29
  • 打赏
  • 举报
回复
支付宝iOS版Demo的Bug
iOS版的Demo(2012年4月19日版)AlixPayDemo中RSADataSigner.m文件中Ln 62和Ln 79行中要加上RSA
原来:

[result appendString:@"-----BEGIN PRIVATE KEY-----\n"];



[result appendString:@"\n-----END PRIVATE KEY-----"];



应改为:
[result appendString:@"-----BEGIN RSA PRIVATE KEY-----\n"];


[result appendString:@"\n-----END RSA PRIVATE KEY-----"];




否则无法读取私钥,会报 Private Key Read error
nicky_yangke 2012-05-29
  • 打赏
  • 举报
回复
支付宝iOS版Demo的Bug
iOS版的Demo(2012年4月19日版)AlixPayDemo中RSADataSigner.m文件中Ln 62和Ln 79行中要加上RSA
原来:
复制代码
[result appendString:@"-----BEGIN PRIVATE KEY-----\n"];


复制代码
[result appendString:@"\n-----END PRIVATE KEY-----"];



应改为:
复制代码
[result appendString:@"-----BEGIN RSA PRIVATE KEY-----\n"];


复制代码
[result appendString:@"\n-----END RSA PRIVATE KEY-----"];




否则无法读取私钥,会报 Private Key Read error
Tom_殇子 2012-04-23
  • 打赏
  • 举报
回复
大哥!我遇到了类拟的问题!请问你这个问题怎么解决的?
youthboy 2012-04-15
  • 打赏
  • 举报
回复

0down voteaccepted
You might try PEM_read_RSA_PUBKEY() instead of PEM_read_RSAPublicKey().
This is all about formats.
The default public key file format generated by openssl is the PEM format.
PEM_read_RSA_PUBKEY() reads the PEM format. PEM_read_RSAPublicKey() reads the PKCS#1 format.
So if you want to stick to PEM_read_RSAPublicKey() you could generate the public key file using the PKCS#1 format by specifying the -outform DER option when generating the public key.


http://stackoverflow.com/questions/7818117/why-i-cant-read-openssl-generated-rsa-pub-key-with-pem-read-rsapublickey

找到相关提示,目前还在测试中,能读出r,但是i2d_RSAPublicKey 读出的publickey不正确。
ku281 2011-07-18
  • 打赏
  • 举报
回复
和你一样啊。两年了 也没有见人解决吗?
lfisher 2009-02-20
  • 打赏
  • 举报
回复
请高手指点!
lfisher 2009-02-19
  • 打赏
  • 举报
回复
没人懂么?
自己先顶一个!

4,453

社区成员

发帖
与我相关
我的任务
社区描述
云计算 云安全相关讨论
社区管理员
  • 云安全社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧