AES加密:相同密码key,同一个明文居然可以产生多个不同密文?

z1z2z3z4 2008-05-19 05:17:06
小弟正在学习AES加密解密。我使用自写的加密程序(下称A程序)和一个下载的加密程序(B程序),当设置key相同时,发现同一个明文加密后得到不同的密文。不过,不同的密文解密时都能得到原来的明文。A程序具体设置是:

key="aass";
明文="scdn";
A程序加密后密文="9F845536AE038184FCCC0CDB15F54D75";
B程序加密后密文="308D06A06DC44919422263598A9B30E8";
B密文用B程序解密得到“csdn”,A密文用B程序解密也得到“csdn”。

请问:AES加密,明文和密文不是一一对应的吗?这是AES(rijndael)就是这样设计的还是我的程序有错?或者还有什么参数导致了同样明文得到不同密文?
...全文
30673 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
pqy55 2012-10-16
  • 打赏
  • 举报
回复
AES怎么设置密钥?
paradise300 2012-09-26
  • 打赏
  • 举报
回复
Mark,我也遇到了同样的问题,每次编译器一编译出来新的程序,输出的密文就和前面编译出来的结果不一样。可能确实是填充的随机数据的缘故吧。不过只要能正常解密,那也是没问题的,毕竟每个文件也有自己的“指纹”嘛,可以提高安全性。
cai309010077 2012-04-30
  • 打赏
  • 举报
回复
填充方式不同
k1017260687 2011-10-29
  • 打赏
  • 举报
回复
F F 9 A 3 F 0 3 - 5 6 E F - 4 6 1 3 - B D D 5 - 5 A 4 1 C 1 D 0 7 2 4 6密码是多少 用什么工具能还原
pj220 2011-06-12
  • 打赏
  • 举报
回复 1
[Quote=引用 18 楼 pj220 的回复:]
AES 算法使用同一个key 加密同一个明文得到不同密文很正常。

密文不同主要有以下原因:
1.加密key的比特数不同。有(128,192, 256),加密key比特数不一样,密文就不可能一样。
2.明文填充模式不一样。因为AES是分组的,每32字节一组,不满32字节的明文要填充到32字节。不同的填充方法肯定会造成密文的不一致。
3.使用的AES加密模式不一样,有四种模式(ECB、CB……
[/Quote]
4.还有一个就是是否使用初始化向量
pj220 2011-06-12
  • 打赏
  • 举报
回复
AES 算法使用同一个key 加密同一个明文得到不同密文很正常。

密文不同主要有以下原因:
1.加密key的比特数不同。有(128,192, 256),加密key比特数不一样,密文就不可能一样。
2.明文填充模式不一样。因为AES是分组的,每32字节一组,不满32字节的明文要填充到32字节。不同的填充方法肯定会造成密文的不一致。
3.使用的AES加密模式不一样,有四种模式(ECB、CBC、CFB、OFB) ,不同模式加密得到的密文显然不会一样
yk120 2011-05-14
  • 打赏
  • 举报
回复
我估计是因为明文的填充方式不一样。
AES一个明文分组是128bit
所以你输入aass0 明文会填充成128bit再加密

有的填充标准是缺几个字符,再把后面的都填充成“几”,
比如:aass0,缺11个字符,就把后面的字符都填充成ASCII码11,
这样的加密结果就只会有一个

而有的填充方式是:缺几个字符,就把最后一个字符填充成“几”,而中间的则产生随机数填充,
这样的加密结果就会有多个。

而解密时是根据最后一个字符的ASCII码来确定删除解密后的明文的最后几个字符
szy41 2010-09-29
  • 打赏
  • 举报
回复
马克。。。。。。
netlover2008 2010-06-16
  • 打赏
  • 举报
回复
学习中。。。
finalroar 2010-06-07
  • 打赏
  • 举报
回复
有可能是加密模式不同
z1z2z3z4 2009-10-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wolfkain 的回复:]
明显是两个程序对于KEY的填充都是一样的,而对于明文的填充不同,B是常量填充,A是随机值填充
[/Quote]谢谢
gumbour 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wolfkain 的回复:]
明显是两个程序对于KEY的填充都是一样的,而对于明文的填充不同,B是常量填充,A是随机值填充
[/Quote]

同意
AES是16/24/32字节分组。
你只给了5字节明文(包括\0),至少需要填11字节,这11字节AB程序可能不一致。 但不管填充是什么,
加密前和解密后的后16字节都一样的,前5字节自然一样的。


建议加密分组填充部分主动填充,以保证不同环境下一致。

wolfkain 2009-09-08
  • 打赏
  • 举报
回复
明显是两个程序对于KEY的填充都是一样的,而对于明文的填充不同,B是常量填充,A是随机值填充
huxianbao 2009-09-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 z1z2z3z4 的回复:]
小弟正在学习AES加密解密。我使用自写的加密程序(下称A程序)和一个下载的加密程序(B程序),当设置key相同时,发现同一个明文加密后得到不同的密文。不过,不同的密文解密时都能得到原来的明文。A程序具体设置是:

key="aass";
明文="scdn";
A程序加密后密文="9F845536AE038184FCCC0CDB15F54D75";
B程序加密后密文="308D06A06DC44919422263598A9B30E8";
B密文用B程序解密得到“csdn”,A密文用B程序解密也得到“csdn”。

请问:AES加密,明文和密文不是一一对应的吗?这是AES(rijndael)就是这样设计的还是我的程序有错?或者还有什么参数导致了同样明文得到不同密文?
[/Quot]
加密后密文不同是因为不同的人写的程序对消息和密钥的填充是不同的,所以导致加密结果不同。还有明文和密文是一一对应的,但是这里的一一对应实在同一个程序的前提下。
Tycool 2008-08-07
  • 打赏
  • 举报
回复
楼主,“完了!我无法测得上述结果(去除了空格)。可否给出NIST的连接?”上面这个测试,里面的数据是16进制的,不是去掉空格的字符串!!!

你的AES和别的AES同样明文key,得出不同密文,是正常的: 1) AES可以选择不同长度的key(128bit、256bit) 2) AES里面本身有不同的改编版,比如我还没细分析过的一个QuickAES版本

你的每次密文结果不一样可能是对AES的改编了,比如带了HASH串做新key,或者最大的可能是你的程序buffer的bug:
每次你输入key前,没有清空,而残留了上次key的尾巴部分,加密完后再输正确key当时还能解密。故意输错个长的key后,再用正确的key就无法解密成功,切记!
z1z2z3z4 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sining520 的回复:]
NIST给的调试数据:
plain: 6BC1BEE2 2E409F96 E93D7E11 7393172A
key: 2B7E1516 28AED2A6 ABF71588 09CF4F3C
cipher: 3AD77BB4 0D7A3660 A89ECAF3 2466EF97
[/Quote]
完了!我无法测得上述结果(去除了空格)。可否给出NIST的连接?
wenxiao1992 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gxqcn 的回复:]
我估计造成这种差异不是AES算法的问题,
而是不同程序将“字符”与“大整数”相互转换存在差异造成的,
但只要它是合理的,就是自洽的,即加密后再解密可还原。
[/Quote]
同意啊
看一下加密大文件时文件大小会不会不同
sining520 2008-06-09
  • 打赏
  • 举报
回复
NIST给的调试数据:
plain: 6BC1BEE2 2E409F96 E93D7E11 7393172A
key: 2B7E1516 28AED2A6 ABF71588 09CF4F3C
cipher: 3AD77BB4 0D7A3660 A89ECAF3 2466EF97
mLee79 2008-05-20
  • 打赏
  • 举报
回复
AES没有这种情况, 相同的(明文,密钥,初始向量,加密模式)下得到的结果是一样的...
AES是分组加密的, 明文要填充到16字节的倍数, KEY为16/24/32字节, 不知道你用的是什么填充方式, 如果填充随机数则会出现你这种情况 ...
mathe 2008-05-20
  • 打赏
  • 举报
回复
用MD5吧
加载更多回复(3)

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧