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);
显然新的密钥生成函数更加简洁。
今天介绍的是如何利用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)【转】
- OpenSSL 生成RSA密钥对
- java读取openssl生成的RSA密钥
- Windows下RSA密钥生成工具openssl
- 利用openssl实现RSA密钥生成
- Windows下RSA密钥生成工具openssl
- Linux 下使用openSSL 生成RSA密钥对
- openssl生成支付宝与易宝支付需要的RSA密钥对
- C#中用RSA算法生成公钥和私钥 openssl RSA密钥的生成与配置
- 学习使用OpenSSL生成并使用RSA密钥对
- openssl生成rsa密钥对和密钥格式转换
- 使用OpenSSL生成RSA密钥对供Java和C++使用
- RSA读取密钥——使用openssl编程
- 使用openssl生成RSA公私密钥
- 利用openSSL 生成RSA公钥和密钥
- RSA - Java编程:生成RSA密钥对
- Linux(openSSL)上RSA密钥生成和使用(java)
- .NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY
- python 生成openssl rsa 私钥
- 生成RSA密钥对