您的位置:首页 > 编程语言

openssl0.9.8编程生成RSA密钥对(探讨篇)(windows XP SP2+VC6.0)【转】

2009-05-22 22:00 218 查看
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);

显然新的密钥生成函数更加简洁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: