代码下载: http://www.aescrypt.com/download/
移植需要文件 aes.h aes.c sha256.h sha256.c
分析文件:AesCrypt.c
aes 加解密使用本身很简单,128位,192位,256位加密代码如下:
aes_context ctx;
unsigned char buf[16];
unsigned char key[32];
/*** 128 bits密钥加密 ***/
aes_set_key( &ctx, key, 128 ); // 仅用到 key数组前16字节
aes_encrypt( &ctx, buf, buf ); // 加密 buf指向的 16字节数据
/*** 192 bits密钥加密 ***/
aes_set_key( &ctx, key, 192 ); // 仅用到 key数组前24字节
aes_encrypt( &ctx, buf, buf ); // 加密 buf指向的 16字节数据
/*** 256 bits密钥加密 ***/
aes_set_key( &ctx, key, 256 ); // 用到 key数组全部32字节
aes_encrypt( &ctx, buf, buf ); // 加密 buf指向的 16字节数据
128位,192位,256位解密代码如下:
unsigned char buf[16];
unsigned char key[32];
/*** 128 bits密钥加密 ***/
aes_set_key( &ctx, key, 128 ); // 仅用到 key数组前16字节
aes_decrypt( &ctx, buf, buf ); // 解密 buf指向的 16字节数据
/*** 192 bits密钥加密 ***/
aes_set_key( &ctx, key, 192 ); // 仅用到 key数组前24字节
aes_decrypt( &ctx, buf, buf ); // 解密 buf指向的 16字节数据
/*** 256 bits密钥加密 ***/
aes_set_key( &ctx, key, 256 ); // 用到 key数组全部32字节
aes_decrypt( &ctx, buf, buf ); // 解密 buf指向的 16字节数据
aes.c 中的测试代码调用 加解密各9999遍,大概是检查aes执行速度。
sha256调用过程
typedef unsigned char sha256_t[32];
sha256_context sha_ctx;sha256_t digest;
unsigned char buffer[64]
sha256_starts(&sha_ctx);
sha256_update(&sha_ctx, buffer, 32); // 混淆 buffer 前32字节数据
//或 sha256_update(&sha_ctx, buffer, 64); // 混淆 buffer 64字节数据,长度参数不一定要 2的幂,任意buffer数据对应长度都行
sha256_finish(&sha_ctx, digest); // 得到 32 字节 sha256 校验码
AesCrypt.c 中则使用了 sha256 混淆原始密码获得256位的aes 密钥。
首先获得初始向量和密码 iv_key[0-15] (IV), iv_key[16-47](KEY), 流程如图
获得随机 IV 保存之,用 IV 及 密码 生成 sha256 注册码作为密钥来加密
初始向量和密码 (iv_key[0-15] (IV), iv_key[16-47](KEY)),保存进文件。
解码时,用正确的密码和前面保存的IV 生成 密钥,解码刚保存的加了密的 iv_key,流程图如下。至此完成密钥保存流程。然后就是一般般的文件加密过程,16字节一次
解码时,用正确的密码和前面保存的IV 生成 密钥,解码刚保存的加了密的 iv_key,流程图如下。至此完成密钥保存流程。然后就是一般般的文件加密过程,16字节一次