Crypto++ AES 加密解密流程
2024-09-03 22:36:47
// 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, , 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 = ;
do
{
int relaysize = srclen - pos;
int cpsize = relaysize > AES::BLOCKSIZE ? AES::BLOCKSIZE : relaysize;
memset(inBlock, , AES::BLOCKSIZE);
memset(outBlock, , AES::BLOCKSIZE);
memset(plainText, , 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-);
cout << "after encode and decode :" << dstData << endl;
free(dstData);
getchar();
return ;
}
最新文章
- MongoDB C Driver使用教程
- PRML
- 超越线程池:Java并发并没有你想的那么糟糕
- Django模块学习- django-pagination
- 在PLSQL中编译复杂的java(转)
- python compile
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
- JDBC中的事务-Transaction
- 一个例子说明如何在DataSnap中使用FireDAC
- MFC窗口分割以及各窗口间的通讯
- Java设计模式之《外观模式》及应用场景
- linux redis安装
- Windows下安装和卸载MangoDB服务 --MangoDB
- shell无法捕获程序输出的问题
- ios-静态库,动态库,framework浅析(一)
- 雷林鹏分享: C# 简介
- pyqt 调用颜色选择器
- 使用Mac命令别名,提升工作效率
- sqlite 附加和分离数据库
- C++ operator关键字(重载操作符)