Hy,python3 PyCrypto produire un ValueError quand décrypter long message
je dois déchiffrer un message chiffré avec DES DES et XOR.
Lorsque je décrypte un message de 24 octets, il s'exécute correctement.
Mais avec 40 octets et plus, produire une erreur comme celle-ci:
result4 = XOR.new(message_bytes[i-(blocksize*2):-blocksize]).encrypt(result3)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/XOR.py", line 80, in new
return XORCipher(key, *args, **kwargs)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/XOR.py", line 44, in __init__
self._cipher = _XOR.new(key, *args, **kwargs)
ValueError: XOR key must be no longer than 32 bytes
Je chiffrent le message avec ce code:
def like_3DES_encrypt(message_bytes, key_16bytes_hex):
blocksize = 8
data_b_pad = appendBitPadding(message_bytes, 8)
key_b = bytes.fromhex(BitArray(hex=key_16bytes_hex).hex)
iv = bytes.fromhex(BitArray(hex='0000000000000000').hex)
# split the key on half size
key_1_b = key_b[:8]
key_2_b = key_b[8:16]
result = b''
for i in range(0, len(data_b_pad), blocksize):
block = data_b_pad[i:i+blocksize]
if i > 0:
result0 = XOR.new(result3).encrypt(block)
else:
result0 = block
result1 = DES.new(key_1_b, DES.MODE_CBC, iv).encrypt(result0)
result2 = DES.new(key_2_b, DES.MODE_CBC, iv).decrypt(result1)
result3 = DES.new(key_1_b, DES.MODE_CBC, iv).encrypt(result2)
result += result3
return result
Le cryptage fonctionne sans erreur.
Mais lorsque je tente de décrypter le message crypté avec ce code:
def like_3DES_decrypt(message_bytes, key_16bytes_hex):
blocksize = 8
key_b = bytes.fromhex(BitArray(hex=key_16bytes_hex).hex)
iv = bytes.fromhex(BitArray(hex='0000000000000000').hex)
# split the key on half size
key_1_b = key_b[:8]
key_2_b = key_b[8:16]
result = b''
for i in range(len(message_bytes), 0, - blocksize):
block = message_bytes[i-blocksize:i]
result1 = DES.new(key_1_b, DES.MODE_CBC, iv).decrypt(block)
result2 = DES.new(key_2_b, DES.MODE_CBC, iv).encrypt(result1)
result3 = DES.new(key_1_b, DES.MODE_CBC, iv).decrypt(result2)
if i > blocksize:
result4 = XOR.new(message_bytes[i-(blocksize*2):-blocksize]).encrypt(result3)
else:
result4 = result3
result = result4 + result
result = removeBitPadding(result)
return result
Quel est le problème quand je décrypter le long message?
Merci
Désolé pour mon retard commentaire. il s'exécute. :-) – Brawn1