Crypto++密码库是开源项目,可以去Github上下载,使用VS2010+进行编译,生成cryptlib.lib库文件,可用在项目中,进行加解密操作。
// 对称加密是指加密和解密使用相同的秘钥,比较出名的算法有AES对称加密算法。
// AES对称加密就是对16字节(128位)数据进行加密的过程,也就是把这128位数据通过一系列的变化编程另外一个128位数据。
// 由于加密的数据的长度是不确定的,不一定是128的整数倍,所以,在处理加密的过程中,要增加补位代码。
// 加密步骤:
// 1.声明AES加密器。
// 2.将加密数据用0来填充,按128位大小进行对齐。
// 3.设置AES加密秘钥。
// 4.获取128位数据,并对数据进行加密,返回128位加密结果。
// 5.继续获取下一个128位数据,重复第四步骤,直到数据获取完毕。
// 示例代码:
// 加密
// 输入:原文内容、原文内容的长度、秘钥内容、秘钥内容的长度
// 输出:密文内容、密文内容的长度
BOOL AES_Encrypt(BYTE* pOriginalData, DWORD dwOriginalDataSize, BYTE* pAESKey, DWORD dwAESKeySize, BYTE** ppEncryptData, DWORD pdwEncryptData)
{
// 加密器
AESEncryption aesEncryptor;
// 加密原文数据块
unsigned char inBlock[AES::BLOCKSIZE];
// 加密后的密文数据块
unsigned char outBlokc(AES::BLOCKSIZE));
// 必须全设置为零
unsigned char xorBlock(AES::BLOCKSIZE);
DWORD dwOffset = 0; // 计算偏移
BYTE* pEncryptData = NULL;
DWORD dwEncryptDataSize = 0;
// 计算原文长度,并按128位(即16个字节)对齐,若不够则填充为0
DWORD dwQuotient = dwOriginalDataSize / AES::BLOCKSIZE;
DWORD dwRemained = dwOriginalDataSize % AES::BLOCKSIZE;
if (0 != dwRemained)
{<