2016-12-29 3 views
0

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

Когда я пытаюсь зашифровать файл с помощью PyCrypto. Я могу зашифровать и расшифровать его (работает только с изображениями). Проблема в том, что изображение становится поврежденным, когда я шифрую его и пытаюсь его открыть. Как я могу его исправить, чтобы я мог запускать программу или видеть изображение, когда оно было зашифровано?

Вот код шифрования:

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

def Encryption(Key, filename): 
    chunksize = 64*1024 
    outputFile = "[CryptoReady]"+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)) 
+2

Конечно, это «испорчено», что бы точка шифрования, если бы это было по-прежнему разумно после? –

+0

Возможно, ваше смешивание шифрования с компрессией? Если вы сжимаете изображение (с сжатием без потерь), вы все равно можете его просматривать без потери данных. –

ответ

0

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

Однако, что происходит за кулисами, они только что были преобразованы из X, скажем, Y. Чтобы вернуть его и открыть свой просмотрщик изображений, вам нужно будет запустить файл с полным алгоритмом дешифрования, используя соответствующие ключи. Таким образом, ваш тип Y будет преобразован обратно точно в X, и вы сможете его прочитать.

Смежные вопросы