Я хочу создать ISO 9797 Algorithm3 MAC в Python 3.x в Ubuntu с помощью следующего кода. Я использовал библиотеку pyCryptoDome для предоставления MAC на основе DES3. Код используется из этого блога. Это выглядит нормально в алгоритме и рабочем процессе.
import sys
from Crypto.Cipher import DES
from Crypto.Cipher import DES3
from Crypto.Util.strxor import strxor
import binascii
def macIso9797_m2_alg3(key, msg):
return macIso9797_alg3(key, msg, "80")
def macIso9797_m1_alg3(key, msg):
return macIso9797_alg3(key, msg, "00")
def macIso9797_alg3(key, msg, pad_start):
key_len = int(len(key)/2)
if (key_len != 16):
raise ValueError("Key length should be 16 digits")
# force header padding
msg += pad_start
# padding with "00"
lenRestOfData = int((len(msg)/2) % 8)
msg += "00"*(8-lenRestOfData)
loopNum = int((len(msg)/2) / 8)
bufferOutput = binascii.unhexlify("00"*8)
IV = '\x00'*8
keya = binascii.unhexlify(key[0:16])
keyb = binascii.unhexlify(key[16:])
print ("\n")
i = 0
for i in range (0, loopNum):
tdesa = DES.new(keya, DES.MODE_ECB, IV)
data = msg[i*16:i*16+16]
print(str(i) + "=" + data)
x = bufferOutput
bufferOutput = strxor(binascii.unhexlify(data), bufferOutput)
print (data + " xor " + binascii.hexlify(x).decode('utf-8').upper() + " = " + binascii.hexlify(bufferOutput).decode('utf-8').upper())
bufferOutput = tdesa.encrypt(bufferOutput)
print (" encrypted val = " + binascii.hexlify(bufferOutput).decode('utf-8').upper())
print ("\n")
tdesb = DES.new(keyb, DES.MODE_ECB, IV)
bufferOutput = tdesb.decrypt(bufferOutput)
print (" decrypted val = " + binascii.hexlify(bufferOutput).decode('utf-8').upper())
tdesa = DES.new(keya, DES.MODE_ECB, IV)
bufferOutput = tdesa.encrypt(bufferOutput)
print (" encrypted val = " + binascii.hexlify(bufferOutput).decode('utf-8').upper())
return bufferOutput
macKey="EA1302AFBCCF791CB0065BFAD948B092"
message="test message"
print('MAC Key: ' + macKey)
print('MAC: ' + macIso9797_m1_alg3(macKey, message))
Но я получил следующую ошибку.
Ошибка типа: IV не имеет смысла для режима ECB
Как я могу подготовить соответствующее значение для IV?