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; 
    } 
  • 相关阅读:
    怎么过滤JSON数组中反斜杠“”,反序列化
    ibatis教学实例
    jQuery给input CheckBox的值查询的一致就选中
    jQuery给CheckBox全选与不全选
    ThinkPHP5.1完全开发手册.CHM离线版下载
    4.2 执行环境及作用域【JavaScript高级程序设计第三版】
    21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】
    13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】
    13.6 模拟事件【JavaScript高级程序设计第三版】
    14.5 富文本编辑【JavaScript高级程序设计第三版】
  • 原文地址:https://www.cnblogs.com/jiaoluo/p/3544910.html
Copyright © 2011-2022 走看看