AES 加密中的 IV must be 16 bytes long 错误

IV must be 16 bytes long error in AES encryption

我正在使用 pycrypto 模块进行 AES 加密。并使用文档我写下了下面的函数,但它总是会出错 IV must be 16 bytes long 但我使用的是 16 字节长的 IV.

def aes_encrypt(plaintext):
    """
    """
    key = **my key comes here**
    iv = binascii.hexlify(os.urandom(16)) # even used without binascii.hexlify)

    aes_mode = AES.MODE_CBC

    obj = AES.new(key, aes_mode, iv)

    ciphertext = obj.encrypt(plaintext)
    return ciphertext

使用这个:

from Crypto.Cipher import AES 
import binascii,os

def aes_encrypt(plaintext):
    key = "00112233445566778899aabbccddeeff"
    iv = os.urandom(16)
    aes_mode = AES.MODE_CBC
    obj = AES.new(key, aes_mode, iv)
    ciphertext = obj.encrypt(plaintext)
    return ciphertext

工作如下:

>>> aes_encrypt("TestTestTestTest")
'r_\x18\xaa\xac\x9c\xdb\x18n\xc1\xa4\x98\xa6sm\xd3'
>>> 

这就是区别:

>>> iv =  binascii.hexlify(os.urandom(16))
>>> iv
'9eae3db51f96e53f94dff9c699e9e849'
>>> len(iv)
32
>>> iv = os.urandom(16)
>>> iv
'\x16fdw\x9c\xe54]\xc2\x12!\x95\xd7zF\t'
>>> len(iv)
16
>>>