IV在AES加密中必须是16字节长的错误

2024-05-18 21:41:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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

Tags: 模块key文档objmodeencryptaesplaintext
1条回答
网友
1楼 · 发布于 2024-05-18 21:41:26

使用这个:

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
>>>

相关问题 更多 >

    热门问题