Crypto++学习总结---RSA

静态库下载连接Cryp++ lib 下载

RSA使用方法如下:

#include "randpool.h" 
#include "rsa.h" 
#include "hex.h" 
#include "files.h" 
#include <iostream> 

using namespace std; 
using namespace CryptoPP; 

#pragma comment(lib, "cryptlib.lib") 

//------------------------ 
// 函数声明 
//------------------------ 
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed); 
string RSAEncryptString(const char *pubFilename, const char *seed, const char *message); 
string RSADecryptString(const char *privFilename, const char *ciphertext); 
RandomPool & GlobalRNG(); 

//------------------------ 
// 主程序 
//------------------------ 
int  main() 
{ 
	char priKey[128] = {0}; 
	char pubKey[128] = {0}; 
	char seed[1024] = {0}; 

	// 生成 RSA 密钥对 
	strcpy(priKey, "pri"); // 生成的私钥文件 
		strcpy(pubKey, "pub"); // 生成的公钥文件 
		strcpy(seed, "seed"); 
		GenerateRSAKey(1024, priKey, pubKey, seed); 

	// RSA 加解密 
	char message[1024] = {0}; 
	cout<<"Origin Text:\t"<<"Hello World!"<<endl<<endl; 
		strcpy(message, "Hello World!"); 
		string encryptedText = RSAEncryptString(pubKey, seed, message); // RSA 加密 [Page]
	cout<<"Encrypted Text:\t"<<encryptedText<<endl<<endl; 
		string decryptedText = RSADecryptString(priKey, encryptedText.c_str()); // RSA 解密 
	cout<<"Decrypted Text:\t"<<decryptedText<<endl<<endl;
	system("pause");
	return 0;
} 

//------------------------ 
// 生成RSA密钥对 
//------------------------ 
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed) 
{ 
	RandomPool randPool; 
	randPool.Put((byte *)seed, strlen(seed)); 

	RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength); 
	HexEncoder privFile(new FileSink(privFilename)); 
	priv.DEREncode(privFile); 
	privFile.MessageEnd(); 

	RSAES_OAEP_SHA_Encryptor pub(priv); 
	HexEncoder pubFile(new FileSink(pubFilename)); 
	pub.DEREncode(pubFile); 
	pubFile.MessageEnd(); 
} 

//------------------------ 
// RSA加密 
//------------------------ 
string RSAEncryptString(const char *pubFilename, const char *seed, const char *message) 
{ 
	FileSource pubFile(pubFilename, true, new HexDecoder); 
	RSAES_OAEP_SHA_Encryptor pub(pubFile); 

	RandomPool randPool; 
	randPool.Put((byte *)seed, strlen(seed)); 

	string result; 
	StringSource(message, true, new PK_EncryptorFilter(randPool, pub, new HexEncoder(new StringSink(result)))); 
	return result; 
} 

//------------------------ 
// RSA解密 
//------------------------ 
string RSADecryptString(const char *privFilename, const char *ciphertext) 
{ 
	FileSource privFile(privFilename, true, new HexDecoder);

	RSAES_OAEP_SHA_Decryptor priv(privFile); 

	string result; 
	StringSource(ciphertext, true, new HexDecoder(new PK_DecryptorFilter(GlobalRNG(), priv, new StringSink(result)))); 
	return result; 
} 

//------------------------ 
// 定义全局的随机数池 
//------------------------ 
RandomPool & GlobalRNG() 
{ 
	static RandomPool randomPool; 
	return randomPool; 
} 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值