Crypto++ AES 加密解密流程

摘要:
//埃斯德莫。cpp:定义控制台应用程序的入口点。
// 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;
}

免责声明:文章转载自《Crypto++ AES 加密解密流程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 深入解析光传感器(二)Delphi NativeXML 乱码的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# AES的128位、192位、256位加密

C# AES的128位、192位、256位加密    AES加密原理,这里就不解释了,自行百度。这里主要细说AES的CBC加密模式下的128位、192位、256位加密区别,参考 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB) 。        这三种的区别,主要来自于密钥的长度,16位密钥=128位,24位密钥=192位,32位密钥=2...

Sql Server的艺术(七) SQL 数据插入操作

--用INSERT插入单行数据    在SQL中,可以通过INSERT...VALUES语句直接向数据库表中插入数据。可以整行,也可以部分列。 基本语法: INSERT INTO table_name [column1,column2...] VALUES (values1,values2...

linux kernel的cmdline參数解析原理分析

利用工作之便,今天研究了kernel下cmdline參数解析过程。记录在此。与大家共享。转载请注明出处。谢谢。 Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參数如console root来进行配置执行。 Cmdline是由bootloader传给kernel。如uboot。将须要传给kernel的參数做成一个...

oracle函数,查询,事务

函数包括:单行函数,多行函数(分组函数) 数值函数: --绝对值 select abs(-12.3) fromdual; --向上取值 select ceil(5.3) fromdual; --向下取值 select floor(5.3 )fromdual; --四舍五入 select round(123.4124,2)fromdual; --截取小数点...

psql常用命令

cmd命令 pg_ctl --version:查看pgsl版本 pg_ctl -D /xx/pgdata start:启动pgsl数据库 注:必须在环境变量中设置了PGDATA后才能省略-D参数 ,可以参照这篇论文PostgreSQL环境变量与psql命令的替代作用,但是里面没有讲PGDATA目录的位置 psql -h Server -p Port -U...

mac 获得进程信息的方法

NSProcessInfo可以获得当前进程的信息。获得所有活动进程信息可以尝试使用下面的方法。 进程的信息可以通过ps命令得到也可以通过sysctl方法得到。 但是我总是不能获取进程的流量信息,关于这一点很纠结,现在的想法就是如果能够获取进程的网络端口,然后对端口进行监听,统计其流量,但是如何能够获取进程的网络端口? 在linux中可以通过netstat...