AES算法 加密解密数据部分出错的问题

2019-12-15 11:25发布

本帖最后由 a312835782 于 2018-11-23 11:29 编辑

最近想用AES加密 IAP,找了一个工具,把bin文件加密。用的AES128

   我从加密后的头32字节拿来解密是能正确解密。  但比如我从第16字节取16字节来解密就不对了。
   如果我从第16字节取32字节来解密, 得出来的结果,前16字节是错误的,后16字节是正确的。
  
是哪里不对吗?

1.将文件加密
4.png (65.77 KB, 下载次数: 0) 下载附件 2018-11-23 11:29 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
SUPER_CRJ
1楼-- · 2019-12-15 12:44
加密或者解密之后,重新初始化一下密钥,记得之前从网上下载的一个AES加密,会把上次的结果作为下次的密钥。你试试看
a312835782
2楼-- · 2019-12-15 17:49
本帖最后由 a312835782 于 2018-11-23 11:38 编辑
SUPER_CRJ 发表于 2018-11-23 11:30
加密或者解密之后,重新初始化一下密钥,记得之前从网上下载的一个AES加密,会把上次的结果作为下次的密钥 ...


我是用工具来试的,还没用代码来算

怎么重新初始化密钥呢?     我重启了软件,计算也是一样的


难道意思是上16字节计算结果当下一次的密钥吗?

好像不对

5.png (69.91 KB, 下载次数: 0)

下载附件

2018-11-23 11:38 上传


security
3楼-- · 2019-12-15 18:05
 精彩回答 2  元偷偷看……
boboo
4楼-- · 2019-12-15 20:20
void AES_ECB_128bit_Encrypt(unsigned char * dat, unsigned long Len)
{
    unsigned char chainCipherBlock[16] = {0};
    unsigned long cnt = 0;
    //    memset(chainCipherBlock, 0x00, sizeof(chainCipherBlock));
    aesEncInit();/* 在执行加密初始化之前可以为AES_Key_Table赋值有效的密码数据 */

    /* AES加密,数组dat里面的新内容就是加密后的数据。 */
    /* AES源数据大于16字节时,把源数据的指针+16就好了 */
    for(cnt = 0; cnt < Len; cnt += 16)
        aesEncrypt(dat + cnt, chainCipherBlock);
}
a312835782
5楼-- · 2019-12-16 02:00
security 发表于 2018-11-23 11:39
选 ECB 模式,就能实现你的需求。

卧槽,  还真是,ECB确实是我想要的。

cbc可能是跟前一次计算有关系。
a312835782
6楼-- · 2019-12-16 06:15
boboo 发表于 2018-11-23 11:39
void AES_ECB_128bit_Encrypt(unsigned char * dat, unsigned long Len)
{
    unsigned char chainCipherB ...

谢谢,确实是ECB。

一周热门 更多>