IV должна быть ошибка длиной 16 байт в шифровании AES
Я использую модуль pycrypto для шифрования AES. И с помощью документации я записал нижеприведенную функцию, но она al;ways дает ошибку 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
1 ответ:
Используйте это:
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 >>>