Я пытаюсь найти проблему в коде:
У меня на рабочем столе есть текстовый файл, который я хочу зашифровать, затем расшифровать. Я использую AES CB C в качестве метода шифрования.
Предположим, файл содержит следующую строку: bla bla top secret!!
Я могу успешно зашифровать его следующей строкой: modify(r"C:\Users\XXXXX\Desktop\TEST.txt", encrypt_file)
output: W¢ìPY#Šÿb[l®«fì]ßQzýµá˺cØäûE
Затем я пытаюсь расшифровать его следующей строкой modify(r"C:\Users\XXXXX\Desktop\TEST.txt", decrypt_file)
Получаю следующее исключение: ValueError: Padding is incorrect.
Если я удаляю Функция unpad Я вижу, что текст частично зашифрован следующим образом: bla bla top secrv€\Èu¢Þ@xH‹AÄ
Я не могу найти, что здесь не так. Любая помощь будет оценена.
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
HARD_CODED_KEY = b"SOME KEY"
iv = b'1234567812345678'
def encrypt_file(file, key, blocksize=16):
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(file, blocksize))
return ciphertext
def decrypt_file(file, key, blocksize=16):
cipher = AES.new(key, AES.MODE_CBC, iv)
cleartext = unpad(cipher.decrypt(file), blocksize)
return cleartext
def modify(file, crypt, blocksize=16):
with open(file, "r+b") as f:
plaintext = f.read(blocksize)
while plaintext:
ciphertext = crypt(plaintext, HARD_CODED_KEY, blocksize)
f.seek(-len(plaintext), 1) # go back to the same point before the read
f.write(ciphertext)
plaintext = f.read(blocksize)