Префиксные значения IV Шифрование AES приводит к ошибке - PullRequest
0 голосов
/ 30 ноября 2018

Я получаю Error 131073 while instatiating the CFB mode, когда пытаюсь использовать значение IV с префиксом.Когда я изменяю его на случайный, он работает, но мне нужно, чтобы он был с префиксом.

То, что я пробовал, выдает эту ошибку:

import base64
from Crypto.Cipher import AES
import hashlib
from Crypto import Random
import binascii

def pad(s):
    return s + b"\0" * (AES.block_size - len(s) % AES.block_size)

def encrypt(message, key, key_size=256):
    message = pad(message)
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(key, AES.MODE_CFB, iv)
    return base64.b64encode(cipher.encrypt(message))

key = hashlib.sha256(b'P9KcPLf+q21f9DUnI0cyP1xgALRa8+uKfZXiNIcjphM=').digest()
key1 = base64.b64encode(key)
iv_value = b'lEvSlTN0Q7gu9sAUvPTySQ=='
iv = base64.b64encode(iv_value) #How can prefix this?

cipher = AES.new(key, AES.MODE_CFB, iv)

message = Mac_AddressBytes + ip_address_Bytes + DeviceIdBytes
msg = iv + cipher.encrypt(message)

s = encrypt(message, key)

DeviceIdentity = "0x" + s.decode('utf-8')
print(str(DeviceIdentity))

Но когда я устанавливаю IV как случайный, яполучаю желаемый вывод.

iv = Random.new().read(AES.block_size)

Как использовать префиксное значение для IV?

Примечание: Mac_AddressBytes, ip_address_Bytes и DeviceIdBytes являются действительными значениями MACадрес, IP-адрес, DeviceID Значения представляют собой случайные строки

1 Ответ

0 голосов
/ 30 ноября 2018

Вы получаете ошибку:

ValueError: Incorrect IV length (it must be 16 bytes long)

Вы должны декодировать свой iv

iv = base64.b64decode(iv_value)
...