Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15518570
  • 博文数量: 112
  • 博客积分: 11195
  • 博客等级: 上将
  • 技术积分: 1989
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-20 11:04
文章分类

全部博文(112)

文章存档

2013年(2)

2012年(27)

2011年(6)

2010年(11)

2009年(6)

2007年(7)

2006年(23)

2005年(30)

分类: LINUX

2009-08-24 11:53:33

让我们先来看一下pem.h头文件中的定义:
 

#define PEM_read_RSAPrivateKey(fp,x,cb,u) (RSA *)PEM_ASN1_read( \
        (char *(*)())d2i_RSAPrivateKey,PEM_STRING_RSA,fp,(char **)x,cb,u)
#define PEM_read_RSAPublicKey(fp,x,cb,u) (RSA *)PEM_ASN1_read( \
        (char *(*)())d2i_RSAPublicKey,PEM_STRING_RSA_PUBLIC,fp,(char **)x,cb,u)
        
#define PEM_read_bio_RSAPrivateKey(bp,x,cb,u) (RSA *)PEM_ASN1_read_bio( \
        (char *(*)())d2i_RSAPrivateKey,PEM_STRING_RSA,bp,(char **)x,cb,u)
#define PEM_read_bio_RSAPublicKey(bp,x,cb,u) (RSA *)PEM_ASN1_read_bio( \
        (char *(*)())d2i_RSAPublicKey,PEM_STRING_RSA_PUBLIC,bp,(char **)x,cb,u)

 

对应的很工整是不是,你生成一个私钥,然后用它生成一个公钥。

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可以查看到他们的符号,很诡异!

现象描述完了,还未探其究竟。

 

阅读(63038) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

lzp35202652017-09-04 10:57:37

还真是非对称啊