2010-01-21 38 views

回答

4

望着documentation,似乎它就是你的,图书馆用户,以填充数据自己。该文档指出,AES的块大小始终为16个字节,因此您需要将数据填充到16个字节的倍数。

填充如何完成取决于数据的类型。对于字符串,最好的方法可能是将字符串编码为特定的编码,然后采用该编码的长度。你不依赖于所有字符的方式由8位码点表示:当你的数据是一个字节数组

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

类似的方法会奏效。

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

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

3

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

相关问题