zoukankan      html  css  js  c++  java
  • 基于Crypto++的aes 字符串加解密实现

    esaes.h:

    #ifndef ESAES_H
    #define ESAES_H
    #include <cryptopp/aes.h>
    #include <iostream>
    #include <string>
    using namespace std;
    using namespace CryptoPP;
    class ESAes
    {
    public:
        ESAes();
        string encrypt();
        string decrypt();
        void test();
        void Setkey(string inkey);
        void Setcleartext(string incleartext);
        void Setciphertext(string inciphertext);
    private:
        string cleartext;
        string ciphertext;
        string key;
        unsigned char inBlock[AES::BLOCKSIZE];
    };
    
    #endif // ESAES_H
    

    esaes.cpp

    string ESAes::encrypt()
    {
        //加密
        AESEncryption aesEncryptor; //加密器
    
        unsigned char aesKey[AES::DEFAULT_KEYLENGTH]=""; //密钥
        strcpy((char*)aesKey, key.c_str());
        unsigned char inBlock[AES::BLOCKSIZE]="";// = cleartext; //要加密的数据块
        strcpy((char*)inBlock,cleartext.c_str());
        unsigned char outBlock[AES::BLOCKSIZE]; //加密后的密文块
        unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零
    
        memset( xorBlock, 0, AES::BLOCKSIZE ); //置零
    
        aesEncryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); //设定加密密钥
        //aesEncryptor.SetKey();
        aesEncryptor.ProcessAndXorBlock( inBlock, xorBlock, outBlock ); //加密
    
        //以16进制显示加密后的数据
        //for( int i=0; i<16; i++ ) {
        //cout << hex << (int)outBlock[i] << " ";
        //}
        //这里将字符数组转换成string类型
        ciphertext=(char*)outBlock;
        return ciphertext;
    }
    string ESAes::decrypt()
    {
        //解密
        AESDecryption aesDecryptor;
        unsigned char aesKey[AES::DEFAULT_KEYLENGTH]=""; //密钥
        strcpy((char*)aesKey, key.c_str());
        unsigned char plainText[AES::BLOCKSIZE];
        //unsigned char outBlock[AES::BLOCKSIZE]=ciphertext; //加密后的密文块
        unsigned char outBlock[AES::BLOCKSIZE]="";
        strcpy((char*)outBlock,ciphertext.c_str());
        unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零
    
        memset( xorBlock, 0, AES::BLOCKSIZE ); //置零
    
        aesDecryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH );
    
        //细心的朋友注意到这里的函数不是之前在DES中出现过的:ProcessBlock,
        //而是多了一个Xor。其实,ProcessAndXorBlock也有DES版本。用法跟AES版本差不多。
        //笔者分别在两份代码中列出这两个函数,有兴趣的朋友可以自己研究一下有何差异。
        aesDecryptor.ProcessAndXorBlock( outBlock, xorBlock, plainText );
    
    
        //for( int i=0; i<16; i++ )
        //{
        //    cout << plainText[i];
        //}
        cleartext=(char*)plainText;
        //cout << endl;
        return cleartext;
    }
    void ESAes::Setkey(string inkey)
    {
        //设置密钥
        this->key=inkey;
    }
    
    void ESAes::Setcleartext(string incleartext)
    {
        this->cleartext=incleartext;
    }
    void ESAes::Setciphertext(string inciphertext)
    {
        ciphertext=inciphertext;
    }
    

      

  • 相关阅读:
    基于SVM的数字识别
    Python3 uniform() 函数
    使用贝叶斯分类器从个人广告中获取区域倾向
    logistic回归预测病马死亡率
    python3报错解决办法:TypeError: 'range' object doesn't support item deletion
    python机器学习实战 getA()函数详解
    python中的scatter()方法
    Python split()方法
    Python strip()方法
    贝叶斯垃圾邮件过滤
  • 原文地址:https://www.cnblogs.com/AvalonRookie/p/6985667.html
Copyright © 2011-2022 走看看