当前位置: 移动技术网 > IT编程>开发语言>C/C++ > Crypto++ AES 加密解密流程

Crypto++ AES 加密解密流程

2018年08月28日  | 移动技术网IT编程  | 我要评论

卡戴珊qvod,战斗在大马,javpee

// aesdemo.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>
#include <tchar.h>
#include <iostream>

#include "aes.h"

using namespace std;
using namespace cryptopp;


int main()
{
    cout << "aes demo "<< aes::staticalgorithmname() << endl;
    unsigned char aeskey[aes::default_keylength] = "aes"; //密钥

    aesencryption aesencryptor; //加密器     
    aesencryptor.setkey(aeskey, aes::default_keylength); //设定加密密钥

    char* srcdata = "123456789abcdefghi987654321";

    cout << "will be encode:" << srcdata << endl;

    unsigned char xorblock[aes::blocksize]; //必须设定为全零
    memset(xorblock, 0, aes::blocksize); //置零
    unsigned char inblock[aes::blocksize]; //要加密的数据块
    unsigned char outblock[aes::blocksize]; //加密后的密文块

    aesdecryption aesdecryptor;
    aesdecryptor.setkey(aeskey, aes::default_keylength);
    unsigned char plaintext[aes::blocksize];

    int srclen = strlen(srcdata);
    char* dstdata = (char*)calloc(srclen, sizeof(char));
    int pos = 0;
    do 
    {
        int relaysize = srclen - pos; 
        int cpsize = relaysize > aes::blocksize ? aes::blocksize : relaysize;
        memset(inblock, 0, aes::blocksize);
        memset(outblock, 0, aes::blocksize);
        memset(plaintext, 0, aes::blocksize);
        memcpy(inblock, srcdata + pos, cpsize);
        aesencryptor.processandxorblock(inblock, xorblock, outblock); //加密
        aesdecryptor.processandxorblock(outblock, xorblock, plaintext);
        memcpy(dstdata + pos, plaintext, cpsize);
        pos += cpsize;

    } while (pos < srclen-1);
    cout << "after encode and decode :" << dstdata << endl;
    free(dstdata);
    getchar();
    return 0;
}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网