Текст шифрования PyCrypto не дает открытого текста

Я играл в реализации AES и DES PyCrypto. Каждый раз, когда я расшифровывал зашифрованный текст, который я шифровал из простого текста, он выдавал случайные строки.

Я пробовал следующее:

from Crypto.Cipher import AES,DES
from Crypto import Random

iv_AES = Random.new().read(AES.block_size)
iv_DES = Random.get_random_bytes(8)

key_AES = 'abcdefghijklmnop'
key_DES = 'abcdefgh'

aes = AES.new(key_AES,AES.MODE_CFB,iv_AES)
aes1 = AES.new(key_AES,AES.MODE_CFB,iv_AES)
des = DES.new(key_DES,DES.MODE_CFB,iv_DES)
des1 = DES.new(key_DES,DES.MODE_CFB,iv_DES)

plaintext = 'Hello! World'

print plaintext == aes.decrypt(aes.encrypt(plaintext))
print plaintext == des.decrypt(des.encrypt(plaintext))
print plaintext == aes1.decrypt(aes.encrypt(plaintext))
print plaintext == des1.decrypt(des.encrypt(plaintext))

Результат:

False
False
True
True

Я не понимаю, почему это происходит.

Не могли бы вы объяснить, что на самом деле здесь происходит, и почему это так?

1 ответ

Решение

Из документации PyCrypto:

Это также означает, что вы не можете повторно использовать объект для шифрования или дешифрования других данных с тем же ключом.

Проблема заключается в том, что вам придется повторно инициализировать свой шифр или - возможно, лучше - создавать отдельные экземпляры объектов для шифрования и дешифрования.

from Crypto.Cipher import AES,DES
from Crypto import Random

iv_AES = Random.new().read(AES.block_size)
iv_DES = Random.get_random_bytes(8)

key_AES = 'abcdefghijklmnop'
key_DES = 'abcdefgh'

aese = AES.new(key_AES,AES.MODE_CFB,iv_AES)
aesd = AES.new(key_AES,AES.MODE_CFB,iv_AES)
dese = DES.new(key_DES,DES.MODE_CFB,iv_DES)
desd = DES.new(key_DES,DES.MODE_CFB,iv_DES)

plaintext = 'Hello! World'

print plaintext == aesd.decrypt(aese.encrypt(plaintext))
print plaintext == desd.decrypt(dese.encrypt(plaintext))
Другие вопросы по тегам