Ris*_*ise 6 python encryption pycrypto
有人可以告诉我如何在数据中添加填充,使其适用于pycrypto库(Python)中的AES256加密算法.
非常感谢提前.. :)
查看文档,库用户似乎要由您自己填充数据。该文档指出,AES的块大小始终为16个字节,因此您需要将数据填充为16个字节的倍数。
填充的完成方式取决于数据的类型。对于字符串,最好的方法可能是将字符串编码为特定的编码,然后采用该编码的长度。这样,您就不必依赖8位代码点表示的所有字符了:
plaintext = data.encode('utf-8')
l = len(plaintext)
ciphertext = cipher.encrypt(plaintext + ((16 - len%16) * PADDING_BYTE))
Run Code Online (Sandbox Code Playgroud)
当您的数据是字节数组时,类似的方法也适用。
0应该可以像一样正常工作PADDING_BYTE,但是在解密数据时您需要注意删除填充。将数据的长度包括在密文中可能是值得的,例如,在加密之前将数据的长度添加到明文之前,但是随后您需要跳过一些箍以确保正确生成填充。
编辑:哦,是的,就像提到的RFC GregS链接一样,处理长度问题的标准方法是使用填充的长度作为填充字节。即如果您需要6个填充字节,则填充字节为0x06。请注意,如果您不需要任何填充,则可以添加整个填充字节块(的16字节0xa0),以便可以正确恢复消息。