2016-12-29 100 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类型,您将能够阅读它。

相关问题