zoukankan      html  css  js  c++  java
  • 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(); 
      
    //------------------------ 
    // 主程序 
    //------------------------ 
    void main() 
    { 
        char priKey[128] = {0}; 
        char pubKey[128] = {0}; 
        char seed[1024] = {0}; 
      
        // 生成 RSA 密钥对 
        strcpy_s(priKey,sizeof(priKey) / sizeof(priKey[0]), "pri"); // 生成的私钥文件 
        strcpy_s(pubKey,sizeof(pubKey) / sizeof(pubKey[0]),"pub"); // 生成的公钥文件 
        strcpy_s(seed,sizeof(seed) / sizeof(seed[0]),"seed"); 
        GenerateRSAKey(1024, priKey, pubKey, seed); 
      
        // RSA 加解密 
        char message[1024] = {0}; 
        cout<<"Origin Text:t"<<"HelloWorld!"<<endl<<endl; 
        strcpy_s(message,sizeof(message) / sizeof(message[0]),"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; 
    } 
      
    //------------------------ 
    // 生成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)——金矿模型的理解
    $Java HttpClient库的使用
    $Java-json系列(二):用JSONObject解析和处理json数据
    $百度应用引擎BAE的使用与应用部署
    利用ajax短轮询+php与服务器交互制作简易即时聊天网站
    MYSQL explain详解
    Redis 5种数据结构使用及注意事项
    Redis 存储机制
    memcache
    mysql分表和表分区详解
  • 原文地址:https://www.cnblogs.com/jiaoluo/p/3544910.html
Copyright © 2011-2022 走看看