折腾了快1个小时,将常见的一些加密库都测试一下,再根据情况选择一个应用到项目中去.crypto++国内用得蛮多的,资料还算比较齐全,但是让我讨厌的是源文件太乱,把所有的算法都包括进去了,我目前不能辨别哪些文件是我需要的,所以编译crypto++的源代码生成的静态链接库居然达到了34M,很恐怖啊,软件发布时光这个算法库就得34M,比软件本身还大了,正在想办法提取自己需要的部分.
#include  "randpool.h" 
#include  "rsa.h" 
#include  "hex.h" 
#include  "files.h" 
#include <iostream> 
 
 
 
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"<<message<<endl<<endl; 
 
 
         string encryptedText = RSAEncryptString(pubKey, seed, message);     // RSA 加密 
 
        cout<< "加密后字符串:\t"<<encryptedText<<endl<<endl; 
 
         string decryptedText = RSADecryptString(priKey, encryptedText.c_str());     // RSA 解密 
 
        cout<< "解密后字符串:\t"<<decryptedText<<endl<<endl; 
 
         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,  truenew HexDecoder); 
 
        RSAES_OAEP_SHA_Encryptor pub(pubFile); 
 
 
 
        RandomPool randPool; 
 
        randPool.Put(( byte *)seed, strlen(seed)); 
 
 
 
         string result; 
 
        StringSource(message,  truenew PK_EncryptorFilter(randPool, pub,  new HexEncoder( new StringSink(result)))); 
 
         return result; 
 

 
 
 
//------------------------ 
// RSA解密 
//------------------------ 
 
string RSADecryptString( const  char *privFilename,  const  char *ciphertext) 
 

 
        FileSource privFile(privFilename,  truenew HexDecoder); 
 
        RSAES_OAEP_SHA_Decryptor priv(privFile); 
 
 
         string result; 
 
        StringSource(ciphertext,  truenew HexDecoder( new PK_DecryptorFilter(GlobalRNG(), priv,  new StringSink(result)))); 
 
         return result; 
 

 
 
 
//------------------------ 
 
// 定义全局的随机数 
 
//------------------------ 
 
RandomPool & GlobalRNG() 
 

 
         static RandomPool randomPool; 
 
         return randomPool;