Как расшифровать зашифрованный текст RC2?

Python 3.5, pycrypto 2.7a1, Windows, шифрование RC2

Пример:

print('Введите текс, который хотите зашифровать:')
text = input()

with open('plaintext.txt', 'w') as f:
    f.write(text)

key = os.urandom(32)

with open('rc2key.bin', 'wb') as keyfile:
    keyfile.write(key)

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

cipher = ARC2.new(key, ARC2.MODE_CFB, iv)
ciphertext = iv + cipher.encrypt(bytes(text, "utf-8"))

with open('iv.bin', 'wb') as f:
    f.write(iv)

with open('ciphertext.bin', 'wb') as f:
    f.write(ciphertext)

print(ciphertext.decode("cp1251"))

И я хотел бы знать, как я могу расшифровать этот текст, я пытался, но не мог этого сделать.

Моя попытка расшифровать

os.system('cls')
print('Дешифруем значит')

with open('ciphertext.bin', 'rb') as f:
    ciphertext = f.read()

with open('rc2key.bin', 'rb') as f:
    key = f.read()

with open('iv.bin', 'rb') as f:
    iv = f.read()

ciphertext = ciphertext.decode('cp1251')
iv = iv.decode('cp1251')

text =  ciphertext.replace(iv, '')
text = cipher.decrypt(text)

with open('plaintext.txt', 'w') as f:
    f.write(text)

print(text.decode("ascii"))

Но я понял, что мне нужна переменная шифрования, и я не могу сохранить ее в файл.txt или.bin, поэтому я и прошу помощи.

1 ответ

Решение

IV не является секретным значением и обычно пишется перед зашифрованным текстом. Так как вы уже сделали это, вам не нужно писать дополнительный файл IV. RC2 имеет размер блока 64 бита, поэтому IV всегда будет иметь длину 8 байт.

with open('ciphertext.bin', 'rb') as f:
    ciphertext = f.read()

with open('rc2key.bin', 'rb') as f:
    key = f.read()

iv = ciphertext[:ARC2.block_size]
ciphertext = ciphertext[ARC2.block_size:]

cipher = ARC2.new(key, ARC2.MODE_CFB, iv)
text = cipher.decrypt(ciphertext).decode("utf-8")

with open('plaintext.txt', 'w') as f:
    f.write(text)

print(text)

Другие проблемы:

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

  • Не используйте повторно cipher возражать, если вы делаете что-то другое. Для дешифрования нужна только что инициализированная ARC2 объект.

Другие вопросы по тегам