折腾了快1个小时,将常见的一些加密库都测试一下,再根据情况选择一个应用到项目中去.crypto++国内用得蛮多的,资料还算比较齐全,但是让我讨厌的是源文件太乱,把所有的算法都包括进去了,我目前不能辨别哪些文件是我需要的,所以编译crypto++的源代码生成的静态链接库居然达到了34M,很恐怖啊,软件发布时光这个算法库就得34M,比软件本身还大了,正在想办法提取自己需要的部分.
#include
"randpool.h"
#include "rsa.h"
#include "hex.h"
#include "files.h"
#include
using namespace std;
using namespace CryptoPP;
//------------------------
// 函数声明
//------------------------
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, "private.ilcd"); // 生成的私钥文件名
strcpy(pubKey, "public.ilcd"); // 生成的公钥文件名
strcpy(seed, "seed");
//创建公钥,私钥配对
GenerateRSAKey(1024, priKey, pubKey, seed);
// RSA 加解密
char message[1024] = {0};
strcpy(message, "www.ilcd.tv");
cout<< "原始字符串:\t"<
string encryptedText = RSAEncryptString(pubKey, seed, message); // RSA 加密
cout<< "加密后字符串:\t"<
string decryptedText = RSADecryptString(priKey, encryptedText.c_str()); // RSA 解密
cout<< "解密后字符串:\t"<
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;
}
#include "rsa.h"
#include "hex.h"
#include "files.h"
#include
using namespace std;
using namespace CryptoPP;
//------------------------
// 函数声明
//------------------------
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, "private.ilcd"); // 生成的私钥文件名
strcpy(pubKey, "public.ilcd"); // 生成的公钥文件名
strcpy(seed, "seed");
//创建公钥,私钥配对
GenerateRSAKey(1024, priKey, pubKey, seed);
// RSA 加解密
char message[1024] = {0};
strcpy(message, "www.ilcd.tv");
cout<< "原始字符串:\t"<
string encryptedText = RSAEncryptString(pubKey, seed, message); // RSA 加密
cout<< "加密后字符串:\t"<
string decryptedText = RSADecryptString(priKey, encryptedText.c_str()); // RSA 解密
cout<< "解密后字符串:\t"<
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;
}