gpt4 book ai didi

java - 为什么 Java 加密 AES 会填充我的 16 字节明文消息?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:24 26 4
gpt4 key购买 nike

例如,如果消息的长度为 16 字节:字符串消息 =“AAAAAAAAAAAAAAA”byte[] plaintext = message.getBytes();//plaintext.length = 16

输出的密文长度为 32 字节,这表明这里有 2 个 block ,第二个 block 已被填充。

然而,如果消息长度为 15 字节或更短:字符串消息 =“AAAAAAAAAAAAAAA”byte[] plaintext = message.getBytes();//plaintext.length = 15

输出密文也将是 16 字节长。

既然AES的 block 是16字节长,为什么16字节的明文消息会被分成两个 block 并进行填充?

谢谢!

最佳答案

这实际上取决于加密模式。有些模式根本不需要填充,但是需要填充的模式确实要求 block 长度倍数的消息包含一个充满填充字节的附加 block ,否则数据是否填充会变得不明确。

由于一些消息将被填充,算法将总是查看最后字节并将它们解释为填充信息。因此,所有消息都必须被填充,即使是那些一开始就具有合适长度的消息。

例如,如果您的填充方案添加了字节,其值是填充 block 的缺失字节数,并且您的消息以 0102 0203 03 03 等结尾。您将不知道它是填充还是数据。

关于java - 为什么 Java 加密 AES 会填充我的 16 字节明文消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com