我正在使用 AES 的 PyCrypto 实现,并且我正在尝试使用 24 字节 key 加密一些文本(24 字节)。
aes_ecb = AES.new('\x00'*24, AES.MODE_ECB)
aes_ecb.encrypt("123456"*4)
我收到了这个令人惊讶的错误
ValueError: Input strings must be a multiple of 16 in length
那么为什么我的输入必须是 16 的倍数呢?输入字符串长度必须是我的 key 大小的倍数对我来说更有意义,因为这将允许在 key 和明文块之间进行很好的按位运算。
最佳答案
AES 是 block cipher .引自维基百科页面:“分组密码是一种对固定长度位组进行操作的确定性算法”。
AES 只能处理 128 位块(即您注意到的 16 个字符)。
如果您的输入长度不是 128 的倍数,则取决于您的应用程序,您可能必须非常小心处理 padding .
关于aes - 为什么 AES 的所有输入都必须是 16 的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773450/