#include <openssl/rsa.h>
int PEM_write_RSAPublicKey(FILE* fp,const RSA* r);
int PEM_write_RSAPrivateKey(FILE* fp,const RSA* r,const EVP_CIPHER* enc,
unsigned char* kstr,int klen,pem_password_cb* cb,void* u);
参数:
- fp: 需要打开一个磁盘文件,并且指定写权限
- r: 存储了密钥对
/////////////// - 私钥独有的参数
- enc: 指定的加密算法 -> 堆成加密 -> NULL
- kstr: 对称加密的密钥 -> NULL
- klen: 密钥长度 -> 0
- cb:回调函数,用不到,NULL
- u: 给回调传参,用不到,NULL
#include <iostream>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <cstdio>
void generateRsaKey()
{
// 创建RSA变量
RSA* rsa = RSA_new();
// 创建bignum对象并初始化
BIGNUM* e = BN_new();
BN_set_word(e,12345);
// 生成密钥对
RSA_generate_key_ex( rsa,1024,e,NULL );
//---------生成密钥对 1024代表密钥长度
// RSA_F4为公钥指数,一般情况下使用RSA_F4即可,
// RSA_generate_key( 1024,RSA_F4,NULL,NULL );
// 将密钥对写入到磁盘
FILE* fp = fopen("public.pem","w"); // 写公钥
PEM_write_RSAPublicKey(fp,rsa);
fclose(fp);
fp = fopen("private.pem","w"); // 写私钥
PEM_write_RSAPrivateKey(fp,rsa,NULL,NULL,0,NULL,NULL);
fclose(fp);
// 密钥对写入文件的时候,需要编码 -> base64
}
int main()
{
generateRsaKey();
return 0;
}
原文:https://www.cnblogs.com/lodger47/p/14877698.html