OpenSSL非对称加密RSA应用——Windows版本

本文介绍如何使用OpenSSL库实现RSA密钥的生成、读取及数据的加密和解密过程,并提供了一个C++示例程序,演示了不同方式下(如从内存或文件读取密钥)的操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.openssl源码

ftp://ftp.openssl.org/source/


2.openssl命令

openssl genrsa -out prikey.pem 1024 

openssl rsa -in privkey.pem -pubout -out pubkey.pem


3.openssl c++应用实例

#include <iostream>
#include <string>
using namespace std;


#include "OpenSSLRSA.h"


int _tmain(int argc, _TCHAR* argv[])
{
COpenSSLRSA osrsa;


osrsa.m_sText = "123abcd我没啥地方法规ldjf464";


osrsa.m_sPubKeyFile = "public.pem";
osrsa.m_sPriKeyFile = "private.pem";
//strcpy(osrsa.m_sPriKeyPwd, "1234");


int nState = 1;


switch(nState)
{
case 1:
{
// 1.从内存中读取秘钥
osrsa.BuildKey();


if(!osrsa.ReadPubRSAByMem())
return -1;
if(!osrsa.ReadPriRSAByMem())
return -1;
}
break;
case 2:
{
// 2.直接产生秘钥对
osrsa.BuildKey();
}
break;
case 3:
{
// 3.从文件中读取秘钥
osrsa.BuildKey();


if(!osrsa.ReadPubRSAByFile())
return -1;
if(!osrsa.ReadPriRSAByFile())
return -1;
}
break;
default:
break;
}


cout << "-----原文: " << osrsa.m_sText << endl << endl;


//密文(二进制数据)
//string two = osrsa.EncodeRSAPubKeyData();
string two = osrsa.EncodeRSAPriKeyData();


int len1 = osrsa.m_sPubKey.length();
int len2 = osrsa.m_sPriKey.length();
int len3 = osrsa.m_sText.length();
int len4 = osrsa.m_sCryptText.length();

if(two.length() <= 0)
return 0;


cout << "-----密文: " << two << endl << endl;






//顺利的话,解密后的文字和原文是一致的
//string three = osrsa.DecodeRSAPriKeyData();
string three = osrsa.DecodeRSAPubKeyData();


if(three.length() <= 0)
return 0;


cout << "-----译文: " << three << endl << endl;


cout<<"公钥长度 = "<<len1<<endl;
cout<<"私钥长度 = "<<len2<<endl;
cout<<"原文长度 = "<<len3<<endl;
cout<<"密文长度 = "<<len4<<endl;
cout<<endl;


return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值