查看: 3391|回复: 4

【AES加密】FM33LC023 AES256加密问题

[复制链接]

3

主题

8

帖子

75

积分

中级工程师

Rank: 2

积分
75
发表于 2020-5-6 10:50:52 | 显示全部楼层 |阅读模式
使用例程AES128加密,加密后数据和AES在线工具一致,如下图: 1.png
现修改程序为AES256加密:
2.png
3.png
加密后数据和AES在线工具不一致,请问下程序中还需修改哪些地方呢?

回复

使用道具 举报

1

主题

16

帖子

351

积分

高级工程师

Rank: 3Rank: 3

积分
351
发表于 2020-6-26 18:05:15 | 显示全部楼层
问题可能出在这个数组,你计算的是32字节长度的明文的AES256-CBC结果:
uint8_t DataToEncrypt[32] = "1234567890";

AES明文是以16字节分组的,PC软件端你选择了Zero padding方式,一个明文分组不足16字节的会以十六进制0x0填充,但是你的输入不足16字节,可能填充到16字节明文长度,而不是以32字节长度;而MCU代码是按照32字节明文长度计算AES结果的。我看MCU代码应该没有问题。
aes.c line 306-307
memset(TempBuf , 0, sizeof(TempBuf));
memcpy(TempBuf, DataIn + i*16, DataInLen - i*16);
如果你的MCU计算结果和附图软件截图一致,那么MCU代码就是没有问题的。另外,IV初始向量的长度和明文分组一样也是16字节的。

aes256计算结果

aes256计算结果
回复

使用道具 举报

1

主题

16

帖子

351

积分

高级工程师

Rank: 3Rank: 3

积分
351
发表于 2020-7-12 23:53:32 | 显示全部楼层
接上,
刚拿到复旦微FM33LC04x的开发板,跑了一下AES256 CBC加解密Demo,和PC演算工具结果完全一样,如下图所示,说明MCU代码是没有问题的。

FM33LC04x AES256 CBC 02

FM33LC04x AES256 CBC 02

FM33LC04x AES256 CBC 01

FM33LC04x AES256 CBC 01

FM33LC04x AES256 CBC Code

FM33LC04x AES256 CBC Code
回复

使用道具 举报

1

主题

2

帖子

263

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
263
发表于 2020-7-13 09:43:48 | 显示全部楼层
AES 256的这个256的概念仅仅是针对秘钥长度,不是针对的加密数据长度,加密数据长度是固定的128bit加密,不足128bit的进行补零。
回复

使用道具 举报

1

主题

16

帖子

351

积分

高级工程师

Rank: 3Rank: 3

积分
351
发表于 2020-7-13 11:44:47 | 显示全部楼层
回楼上,基本上是这样的。一个明文分组固定是16字节的,不足16字节的,根据所选填充模式来填充,对于Zero Padding模式,就是补0x00。如果选择其他填充模式,填充内容就不一样,计算的结果当然也不一样了。
楼主可能没有理解AES,原始Demo中的这个函数AES_EncryptionAndDecryption()不用做任何修改的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表