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

标签 aes pycrypto

我正在使用 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/

相关文章:

python - 值错误 : Not a valid PEM pre boundary

c# - NodeJS 和 C# 中的 AES256 加密/解密

java - 尽管更改了加密文本,仍能够解密 Java 中的加密文本

python - 使用 PyCrypto AES 256 加密和解密

python - 安装pycrypto时出错

python - AES 256 加密 -> 更改初始化向量会在不知道 key 的情况下稍微更改解密的消息

mysql aes_decrpyt 返回错误值

javascript - Python Javascript CryptoJS

java - Cipher.do最终输出大小

python - pycrypto 和谷歌应用引擎