为什么Java加密AES填充我的纯文本消息,正好是16字节?

时间:2014-02-27 02:41:44

标签: java encryption aes

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

输出cyphtertext的长度为32字节,表示此处有2个块,第二个块已填充。

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

输出密文也是16字节长。

由于AES的块长度为16字节,为什么16字节的明文消息会被分成两个块并被填充?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

由于某些消息将被填充,因此算法将始终查看最后的字节并将其解释为填充信息。因此,所有消息必须填充,即使是那些首先具有合适长度的消息。

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