[杂项]利用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);显然新的密钥生成函数更加简洁。
|
|
回复:利用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 »
|

.: 公告
有人的地方就有恩怨 有恩怨的地方就是江湖 人在江湖漂,谁能不挨刀 |
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
.: 我的分类(专题)
|

.: 最新日志
.: 最新回复
|

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

.: 留言板
|

.: 链接
|

|