有人可以告诉我如何在数据中添加填充,使其适用于pycrypto库(Python)中的AES256加密算法。
提前多多感谢.. :))
答案 0 :(得分:4)
查看documentation,似乎由图书馆用户自己填写数据。该文档指出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
),以便您可以正确恢复消息。
答案 1 :(得分:3)
使用标准填充方案,例如PKCS-5中第6.1.1步骤#4中列出的方案(如果您使用AES,则将该示例中的8替换为16)。