Всякий раз, когда я использую с pycrypto, он удаляет файл - PullRequest
0 голосов
/ 01 мая 2019

Я нашел в сети некоторый код, который должен шифровать и дешифровать файлы, но всякий раз, когда я его использую, он шифрует файл, а затем при дешифровании файла просто удаляет файл при его дешифровании

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

Вот и вся программа

import os
from Crypto.Cipher import AES
from Crypto.Hash import SHA256
from Crypto import Random

def encrypt(key, filename):
    chunksize = 64*1024
    outputFile = filename
    filesize = str(os.path.getsize(filename)).zfill(16)
    IV = Random.new().read(16)

    encryptor = AES.new(key, AES.MODE_CBC, IV)

    with open(filename, 'rb') as infile:
        with open(outputFile, 'wb') as outfile:
            outfile.write(filesize.encode('utf-8'))
            outfile.write(IV)

            while True:
                chunk = infile.read(chunksize)

                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += b' ' * (16 - (len(chunk) % 16))

                outfile.write(encryptor.encrypt(chunk))


def decrypt(key, filename):
    chunksize = 64*1024
    outputFile = filename

    with open(filename, 'rb') as infile:
        filesize = int(infile.read(16))
        IV = infile.read(16)
        decryptor = AES.new(key, AES.MODE_CBC, IV)
        with open(outputFile, 'wb') as outfile:
            while True:
                chunk = infile.read(chunksize)
                if len(chunk) == 0:
                    break
                outfile.write(decryptor.decrypt(chunk))
            outfile.truncate(filesize)


def getKey(password):
    hasher = SHA256.new(password.encode('utf-8'))
    return hasher.digest()

password = 'hello'
filename = r'C:\Users\user\Desktop\test.txt'
encrypt(getKey(password), filename)
print("encrypted!")
decrypt(getKey(password), filename)
print("Derypted!.")

Я бы хотел сохранить файл, который я пытаюсь расшифровать, нетронутым.

1 Ответ

1 голос
/ 01 мая 2019

Вы используете один и тот же файл для ввода и вывода. Это плохая идея:

def decrypt(key, filename):
    chunksize = 64*1024
    outputFile = filename                    << output

    with open(filename, 'rb') as infile:     << & input is the same
...