本文是在windows环境下,使用的是vs2019编译器。
下面是使用openssl静态库中的函数 实现的一个RSA加密字符串以及加密文件。
下面展示一些 本人实现代码
。
#pragma warning(disable:4996)
#include<string>
#include <assert.h>
#include <openssl/bio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <iostream>
#include <Windows.h>
// 私钥加密
#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"libcrypto.lib")
#pragma comment(lib,"libssl.lib")
// ---- rsa非对称加解密 ---- //
#define KEY_LENGTH 1024 // 密钥长度
#define PUB_KEY_FILE "pubkey.pem" // 公钥路径
#define PRI_KEY_FILE "prikey.pem" // 私钥路径
// 函数方法生成密钥对
void generateRSAKey(std::string strKey[])
{
// 公私密钥对
size_t pri_len;
size_t pub_len;
char* pri_key = NULL;
char* pub_key = NULL;
// 生成密钥对
RSA* keypair = RSA_generate_key(KEY_LENGTH, RSA_F4, NULL, NULL);
BIO* pri = BIO_new(BIO_s_mem());
BIO* pub = BIO_new(BIO_s_mem());
PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL);
PEM_write_bio_RSAPublicKey(pub, keypair);
// 获取长度
pri_len = BIO_pending(pri);
pub_len = BIO_pending(pub);
// 密钥对读取到字符串
pri_key = (char*)malloc(pri_len + 1);
pub_key = (char*)malloc(pub_len + 1);
BIO_read(pri, pri_key, pri_len);
BIO_read(pub, pub_key, pub_len);
pri_key[pri_len] = '\0';
pub_key[pub_len] = '\0';
// 存储密钥对