Python 更改AES加密的默认长度倍数

Python 更改AES加密的默认长度倍数,python,python-3.x,encryption,aes,Python,Python 3.x,Encryption,Aes,我创建了一个函数,它使用Crypto.Cipher: import os from Crypto.Cipher import AES def encrypt_pass(user_entered_plaintext): encrypt_setup = AES.new(os.urandom(32), AES.MODE_CBC, os.urandom(16)) plaintext = user_entered_plaintext

我创建了一个函数,它使用
Crypto.Cipher

    import os
    from Crypto.Cipher import AES

    def encrypt_pass(user_entered_plaintext):
        encrypt_setup = AES.new(os.urandom(32), AES.MODE_CBC, os.urandom(16))
        plaintext = user_entered_plaintext
        ciphertext = encrypt_setup.encrypt(plaintext)

        print(ciphertext)
        return ciphertext
如果我尝试运行此命令,例如:

encrypt_pass('Test')
ValueError: Input strings must be a multiple of 16 in length
我收到这个错误:

encrypt_pass('Test')
ValueError: Input strings must be a multiple of 16 in length
如果我尝试改变:

encrypt_setup = AES.new(os.urandom(32), AES.MODE_CBC, os.urandom(16))

我得到:

ValueError: IV must be 16 bytes long
如何将此输入字符串的最小值强制为8?

只需指定PKCS#7填充即可。您必须在加密之前添加它,在解密之后删除它,因为编写pycrypto的bozos没有将填充作为选项添加。(我认为PHP mcrypt很糟糕!)请参阅CodeTalk的链接

AES加密基于块,块大小为16字节,因此如果输入数据不是块大小的倍数,则必须添加填充

在第二次尝试中,您将iv更改为8字节,但它必须是16字节的块大小


但是您没有保存密钥或iv,因此以后无法解密数据。您需要为他们使用变量。

介意再显示一点吗?如果有人遇到此线程,下面是一篇关于此主题的好文章: