Криптодом AES шифрует и дешифрует - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь найти проблему в коде:

У меня на рабочем столе есть текстовый файл, который я хочу зашифровать, затем расшифровать. Я использую 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)



...