W3CHINA Blog首页    管理页面    写新日志    退出

Blue blue sky

[杂项]利用openssl0.9.8编程生成RSA密钥对(探讨篇)(windows XP SP2+VC6.0)
小工头 发表于 2005/8/18 22:01:35

openssl是一套被广泛利用的开放源代码SSL实现,它不光实现了SSL,还给出了许多有用的相关工具,如生成RSA密钥对、生成证书请求,以及小型CA等等。我们一般通过openssl指令来使用这些小工具,有没有办法直接调用openssl的函数来实现这些功能呢?答案是肯定的。 今天介绍的是如何利用openssl编程生成RSA密钥对。最简单的方法是使用系统调用:exec("openssl rsa -generate")……(无数只脚踏下来……)开个小小的玩笑而已,接下来进入正题。 首先要明确的一点是:openssl0.9.8和openssl0.9.7的文件结构有明显的区别,openssl0.9.8增加了若干个头文件,以及一些新的接口;剩下与openssl0.9.7同名的头文件,内容也有改动。就拿生成RSA密钥对来说,openssl0.9.8就提供了一个与openssl0.9.7完全不同的接口:int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);其中各个参数的含义是这样的:RSA *rsa:存放生成的密钥对的数据结构指针,需要事先分配空间;int bits:密钥对的字节数,一般用2的指数如512,1024;BIGNUM *e:RSA密钥生成算法中要求的大数的指针,需要事先初始化;BN_GENCB *cb:暂时没搞明白……; 最关键的是RSA *rsa,生成的密钥对就存储在这里。各个参数的初始化方法如下:rsa = RSA_new();out=BIO_new(BIO_s_file());(还有一个版本是:BIO *tmpbio = BIO_new(BIO_f_linebuffer());out = BIO_push(tmpbio, out);不知道哪一个对,期待下一步实验)BN_GENCB *cb;直接定义一个静态变量即可参数bn的设置:BN_set_word(bn, 0x10001);可以设成65537或者3,前者用得比较多。 设置好上述参数之后,就可以生成RSA密钥对了。如果使用EVP_PKEY_assign_RSA()和PEM_write_bio_PrivateKey()这两个接口,还可以把私钥导出为用口令加密的PEM文件。这两个接口还在实验中…… 再强调一点,openssl0.9.8源文件中的include目录和inc32目录区别很大,在windows下编译必须使用inc32目录,否则会报错。(俺就是吃了这个亏……5555) 顺路说一下,openssl0.9.8向下兼容了openssl0.9.7的密钥生成接口:RSA * RSA_generate_key(int bits, unsigned long e,void  (*callback)(int,int,void *),void *cb_arg);显然新的密钥生成函数更加简洁。

阅读全文(8629) | 回复(3) | 编辑 | 精华

 


回复:利用openssl0.9.8编程生成RSA密钥对(探讨篇)(windows XP SP2+VC6.0)
boyssl(游客)发表评论于2005/9/17 16:38:07

OK 明白了。谢谢 你有msn or QQ  方便以后交流。 以下为blog主人的回复:  俺QQ号51661944,一般隐身。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

 


回复:利用openssl0.9.8编程生成RSA密钥对(探讨篇)(windows XP SP2+VC6.0)
boyssl(游客)发表评论于2005/9/16 10:39:34

out=BIO_new(BIO_s_file()); 其中BIO_s_file 是创建句柄, 但是返回值做为了 BIO_new()的参数,这一点我不明白,麻烦解释一下好么,谢谢  以下为blog主人的回复:  BIO_new()创建句柄,BIO_s_file()返回的是类型代码。bio.h中的声明如下:BIO_METHOD *BIO_s_file(void );BIO * BIO_new(BIO_METHOD *type);

 


回复:利用openssl0.9.8编程生成RSA密钥对(探讨篇)(windows XP SP2+VC6.0)
boyssl(游客)发表评论于2005/9/15 11:01:33

请问 out=BIO_new(BIO_s_file());这一步是在做什么?BIGNUM *e  怎么得到?  谢谢   以下为blog主人的回复:   out=BIO_new(BIO_s_file());大概是创建一个文件类型的输出流句柄; BIGNUM *e其实就是参数bn,俺写得前后不一致了,抱歉。BN_set_word(bn, 0x10001);除了象例子中这样设成65537之外,还可以设置成3,不过不太常用。 遗憾的是,生成密钥最关键的第一步:生成随机数俺一直没摆平,现在这套做法还没法用……

 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



This is home

.: 公告

有人的地方就有恩怨

有恩怨的地方就是江湖

人在江湖漂,谁能不挨刀


Bloginess

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31

.: 我的分类(专题)

首页(629)
杂项(69)
我喜欢过的声音(35)
耳机评测(18)
七天乐(127)
工作八卦(174)


In the Bowl

.: 最新日志

变化:俺的2012
迟来的总结,俺的2011
暂停更新:娶了媳妇不上网
一次坦诚的大会
妹子,妹子!
领导满月
当了领导能怎样
俺的播放列表
俺的重构总结
开会的故事

.: 最新回复

回复:迟来的总结,俺的2011
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:小学生作文之记一次拔河比赛
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:一次坦诚的大会
回复:一次坦诚的大会
回复:一次坦诚的大会


The Fishkeeper
blog名称:少年包工头的工作日记
日志总数:629
评论数量:1458
留言数量:56
访问次数:8972887
建立时间:2004年12月8日



Text Me

.: 留言板

签写新留言

你太客气了
工作是为了更好的生活。。。
飘过!
初烧耳机
路过留声
自动浇花
节日快乐
向您请教
HAHA
咨询下呵呵


Other Fish in the Sea

.: 链接



Lake JJ

真!鱼家MM

传说中的99

王小四的自留地

挣扎中的职场新人tintin同学




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144761857 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号