7

有人可以告诉我如何在数据中添加填充以使其在 pycrypto 库(Python)中可以接受 AES256 加密算法。

非常感谢提前.. :)

4

2 回答 2

5

查看文档,似乎取决于您,图书馆用户,自己填充数据。文档指出 AES 的块大小始终为 16 字节,因此您需要将数据填充为 16 字节的倍数。

填充的完成方式取决于数据的类型。对于字符串,最好的方法可能是将字符串编码为特定的编码,然后获取该编码的长度。这样,您就不必依赖 8 位代码点表示的所有字符:

plaintext = data.encode('utf-8')
l = len(plaintext)
ciphertext = cipher.encrypt(plaintext + ((16 - len%16) * PADDING_BYTE))

当您的数据是字节数组时,类似的方法将起作用。

0应该可以正常工作PADDING_BYTE,但是在解密数据时需要注意删除填充。在密文中包含数据的长度可能是值得的,例如,在加密之前将数据的长度添加到明文中,但是您需要跳过一些环节以确保正确生成填充。

编辑:哦,是的,就像提到的 RFC GregS 链接一样,处理长度问题的标准方法是使用填充的长度作为填充字节。即,如果您需要 6 个字节的填充,则填充字节为0x06. 请注意,如果您不需要任何填充,则添加整个填充字节块(16 个字节0xa0),以便您可以正确恢复消息。

于 2010-01-21T09:43:57.467 回答
3

使用标准填充方案,例如PKCS-5部分 6.1.1 步骤 #4 中概述的方案(如果使用 AES,则将该示例中的 8 替换为 16)。

于 2010-01-21T12:50:39.863 回答