aes 数据流编解码过程

代码下载: 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_t                    digest;
sha256_context              sha_ctx;
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字节一次





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值