Python 如何在pycrypto库中为数据添加填充以使AES256加密算法可接受

Python 如何在pycrypto库中为数据添加填充以使AES256加密算法可接受,python,encryption,pycrypto,Python,Encryption,Pycrypto,有人能告诉我如何在数据中添加一个填充,以使pycrypto库(Python)中的AES256加密算法能够接受吗 事先非常感谢……) 看看,似乎是由您,图书馆用户自己来填充数据的。文档说明AES的块大小始终为16字节,因此需要将数据填充到16字节的倍数 填充的方式取决于数据的类型。对于字符串,最好的方法可能是将字符串编码为特定的编码,然后获取该编码的长度。这样,您就不必依赖由8位代码点表示的所有字符: plaintext = data.encode('utf-8') l = len(plainte

有人能告诉我如何在数据中添加一个填充,以使pycrypto库(Python)中的AES256加密算法能够接受吗

事先非常感谢……)

看看,似乎是由您,图书馆用户自己来填充数据的。文档说明AES的块大小始终为16字节,因此需要将数据填充到16字节的倍数

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

plaintext = data.encode('utf-8')
l = len(plaintext)
ciphertext = cipher.encrypt(plaintext + ((16 - len%16) * PADDING_BYTE))
当数据是一个字节数组时,类似的方法也会起作用

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


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

使用标准填充方案,如第6.1.1节步骤4中概述的方案(如果使用AES,则将该示例中的8替换为16)