折腾了快1个小时,将常见的一些加密库都测试一下,再根据情况选择一个应用到项目中去.crypto++国内用得蛮多的,资料还算比较齐全,但是让我讨厌的是源文件太乱,把所有的算法都包括进去了,我目前不能辨别哪些文件是我需要的,所以编译crypto++的源代码生成的静态链接库居然达到了34M,很恐怖啊,软件发布时光这个算法库就得34M,比软件本身还大了,正在想办法提取自己需要的部分.
InBlock.gif#include  "randpool.h" 
InBlock.gif#include  "rsa.h" 
InBlock.gif#include  "hex.h" 
InBlock.gif#include  "files.h" 
InBlock.gif#include <iostream> 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif using  namespace std; 
InBlock.gif 
InBlock.gif using  namespace CryptoPP; 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif // 函数声明 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gif void GenerateRSAKey(unsigned  int keyLength,  const  char *privFilename,  const  char *pubFilename,  const  char *seed); 
InBlock.gif 
InBlock.gif string RSAEncryptString( const  char *pubFilename,  const  char *seed,  const  char *message); 
InBlock.gif 
InBlock.gif string RSADecryptString( const  char *privFilename,  const  char *ciphertext); 
InBlock.gif 
InBlock.gifRandomPool & GlobalRNG(); 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif // 主程序 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gif int main() 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif         char priKey[128] = {0}; 
InBlock.gif         char pubKey[128] = {0}; 
InBlock.gif         char seed[1024]    = {0}; 
InBlock.gif 
InBlock.gif 
InBlock.gif         // 生成 RSA 密钥对 
InBlock.gif 
InBlock.gif        strcpy(priKey,  "private.ilcd");     // 生成的私钥文件名 
InBlock.gif 
InBlock.gif        strcpy(pubKey,  "public.ilcd");     // 生成的公钥文件名 
InBlock.gif 
InBlock.gif        strcpy(seed,  "seed"); 
InBlock.gif         //创建公钥,私钥配对 
InBlock.gif        GenerateRSAKey(1024, priKey, pubKey, seed); 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif         // RSA 加解密 
InBlock.gif 
InBlock.gif         char message[1024] = {0}; 
InBlock.gif 
InBlock.gif        strcpy(message,  "www.ilcd.tv"); 
InBlock.gif 
InBlock.gif        cout<< "原始字符串:\t"<<message<<endl<<endl; 
InBlock.gif 
InBlock.gif 
InBlock.gif         string encryptedText = RSAEncryptString(pubKey, seed, message);     // RSA 加密 
InBlock.gif 
InBlock.gif        cout<< "加密后字符串:\t"<<encryptedText<<endl<<endl; 
InBlock.gif 
InBlock.gif         string decryptedText = RSADecryptString(priKey, encryptedText.c_str());     // RSA 解密 
InBlock.gif 
InBlock.gif        cout<< "解密后字符串:\t"<<decryptedText<<endl<<endl; 
InBlock.gif 
InBlock.gif         return 0; 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif // 生成RSA密钥对 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gif void GenerateRSAKey(unsigned  int keyLength,  const  char *privFilename,  const  char *pubFilename,  const  char *seed) 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif        RandomPool randPool; 
InBlock.gif 
InBlock.gif        randPool.Put(( byte *)seed, strlen(seed)); 
InBlock.gif 
InBlock.gif 
InBlock.gif        RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength); 
InBlock.gif 
InBlock.gif        HexEncoder privFile( new FileSink(privFilename)); 
InBlock.gif 
InBlock.gif        priv.DEREncode(privFile); 
InBlock.gif 
InBlock.gif        privFile.MessageEnd(); 
InBlock.gif 
InBlock.gif 
InBlock.gif        RSAES_OAEP_SHA_Encryptor pub(priv); 
InBlock.gif 
InBlock.gif        HexEncoder pubFile( new FileSink(pubFilename)); 
InBlock.gif 
InBlock.gif        pub.DEREncode(pubFile); 
InBlock.gif 
InBlock.gif        pubFile.MessageEnd(); 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif // RSA加密 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gif string RSAEncryptString( const  char *pubFilename,  const  char *seed,  const  char *message) 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif        FileSource pubFile(pubFilename,  truenew HexDecoder); 
InBlock.gif 
InBlock.gif        RSAES_OAEP_SHA_Encryptor pub(pubFile); 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif        RandomPool randPool; 
InBlock.gif 
InBlock.gif        randPool.Put(( byte *)seed, strlen(seed)); 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif         string result; 
InBlock.gif 
InBlock.gif        StringSource(message,  truenew PK_EncryptorFilter(randPool, pub,  new HexEncoder( new StringSink(result)))); 
InBlock.gif 
InBlock.gif         return result; 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif // RSA解密 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gif string RSADecryptString( const  char *privFilename,  const  char *ciphertext) 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif        FileSource privFile(privFilename,  truenew HexDecoder); 
InBlock.gif 
InBlock.gif        RSAES_OAEP_SHA_Decryptor priv(privFile); 
InBlock.gif 
InBlock.gif 
InBlock.gif         string result; 
InBlock.gif 
InBlock.gif        StringSource(ciphertext,  truenew HexDecoder( new PK_DecryptorFilter(GlobalRNG(), priv,  new StringSink(result)))); 
InBlock.gif 
InBlock.gif         return result; 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gif // 定义全局的随机数 
InBlock.gif 
InBlock.gif //------------------------ 
InBlock.gif 
InBlock.gifRandomPool & GlobalRNG() 
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif         static RandomPool randomPool; 
InBlock.gif 
InBlock.gif         return randomPool; 
InBlock.gif 
InBlock.gif
InBlock.gif