Python AES/PKCS5/SHSA256

Python AES/PKCS5/SHSA256,python,encryption,Python,Encryption,我在Python中使用AES/PKCS5/CBC进行加密和解密 据我所知,Java有AES/CBC/PKCS5选项。 Python需要使程序像PKCS5一样工作。 PKCS5是一个8字节的块,但是当我在Python中打印AES.block\u size时,它被打印为16字节块。 根据PKCS5的定义,我尝试: text=text+(8-len(text)%8)*chr(8-len(text)%8) 当我加密该文本时,一条错误消息显示输入必须是16长度的倍数。 当我将AES.block_size

我在Python中使用AES/PKCS5/CBC进行加密和解密 据我所知,Java有AES/CBC/PKCS5选项。 Python需要使程序像PKCS5一样工作。 PKCS5是一个8字节的块,但是当我在Python中打印
AES.block\u size
时,它被打印为16字节块。
根据PKCS5的定义,我尝试:

text=text+(8-len(text)%8)*chr(8-len(text)%8)
当我加密该文本时,一条错误消息显示输入必须是16长度的倍数。
当我将AES.block_size更改为8时,所有代码都运行良好。 然而,我认为将8改为AES.block_size不适合PKCS5的定义


请帮助我理解。

创建填充函数

def pad(text):
    pad= AES.block_size - (len(text) % AES.block_size))
    assert(pad >= 1 && pad <= AES.block_size)
    return text + chr(pad)*pad
def pad(文本):
pad=AES.block\u size-(len(text)%AES.block\u size))

assert(pad>=1&&pad可能会向我们显示一些代码和预期的输入/输出?PKCS5(用于8字节块大小)在AES(16字节块大小)上下文中实际上是一个错误的术语,在某些语言中使用,而不是出于历史原因。正确的术语是PKCS7(用于较大的块大小,例如16字节),请参阅以了解更多详细信息。您的意思是我不能将正确的PKCS5与AES一起使用?不。我想说的是,在Java中AES/CBC/PKCS5Padding实际上意味着PKCS7Padding,并且仅出于历史原因使用术语PKCS5Padding。因此,在AES的上下文中,您应该将pad设置为16字节的块大小。请阅读链接的答案,它对此进行了很好的解释e、 除此之外,大多数库(PyCryptodome、Cryptography)都隐式或显式地支持填充。用户定义的实现通常是不必要的。天哪,我完全理解!非常感谢!!!!!!!!!我真的很困惑,但感谢你,我明白了!!太多了!!祝你愉快!我太关注8字节了。我完全理解了thx!!