为什么AES的所有输入必须是16的倍数?

Mar*_*ark 4 aes pycrypto

我正在使用AES的PyCrypto实现,我正在尝试使用24字节密钥加密一些文本(24字节).

aes_ecb = AES.new('\x00'*24, AES.MODE_ECB)
aes_ecb.encrypt("123456"*4)
Run Code Online (Sandbox Code Playgroud)

我得到了这个令人惊讶的错误ValueError: Input strings must be a multiple of 16 in length
那么为什么我的输入必须是16的倍数?对我来说更有意义的是输入字符串长度必须是我的密钥大小的倍数,因为这将允许密钥和明文块之间的良好按位操作.

Pas*_*uoq 5

AES是分组密码.来自维基百科页面的引用:"分组密码是一种在固定长度的比特组上运行的确定性算法".

AES只能使用128位的块(即16个字符,正如您所注意到的).

如果输入的长度不是128的倍数,则根据您的应用程序,您可能必须非常小心地处理填充.