【问题标题】:How to encrypt multiple files in Python 2如何在 Python 2 中加密多个文件
【发布时间】:2018-06-11 19:39:34
【问题描述】:

我一直在创建一个数据保护程序,它使用 SHA-256 加密计算机上的所有文件。到目前为止,该程序能够一次加密一个指定文件(已硬编码到程序中)并附加一个 .enc 扩展名。这里唯一的问题是程序在加密后创建一个新文件,而不是保存原始文件。因此,如果我加密 mypass.txt,我现在将拥有 mypass.txt 和 mypass.enc,但我需要将 mypass.txt 转换为 mypass.enc。此外,如果有人对如何加密所有文件而不是仅对硬编码文件有任何想法,我将非常感激。 非常感谢任何有任何意见的人,如果您需要任何其他信息,请告诉我。

import os, random, struct
from Crypto.Cipher import AES

def encrypt_file(key, in_filename, out_filename=None, chunksize=64*1024):

    if not out_filename:
        out_filename = in_filename + '.enc'

    iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16))
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    filesize = os.path.getsize(in_filename)

    with open(in_filename, 'rb') as infile:
        with open(out_filename, 'wb') as outfile:
            outfile.write(struct.pack('<Q', filesize))
            outfile.write(iv)

            while True:
                chunk = infile.read(chunksize)
                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += ' ' * (16 - len(chunk) % 16)

                outfile.write(encryptor.encrypt(chunk))

【问题讨论】:

  • '...使用 SHA-256 加密计算机上的所有文件...'。幸运的是,这不是您的代码正在做的事情。
  • 是的,不然就不会发在这里了吧?
  • 你可以纠正错字。
  • 嗯,对不起,您能详细说明一下吗? :'D

标签: python encryption hash cryptography pycrypto


【解决方案1】:

我假设您希望尽可能删除原始文件的内容。 创建加密文件后,可以用0字节覆盖原文件,然后删除。

注意:这是针对 HDD 的。 SSD 驱动器在覆盖文件以实现磨损均衡时可以并且将使用不同的内存块。所以用 0 字节覆盖在 SSD 上没有用。对于 SSD,您应该确保启用了 TRIM。 (如何做到这一点取决于所使用的操作系统和文件系统。)问题是只有 SSD 的控制器才能确定它何时重新使用一块内存,从而消除旧的内容。因此,在 SSD 上,您无法确定文件内容已消失。

由于上述原因,我认为对机密数据使用加密文件系统比加密单个文件更好。这样,写入物理设备的所有内容都会被加密。

至于删除多个文件,您有多种选择。

  1. 在命令行中提供要加密的文件的名称。这可以在您的脚本中检索为sys.args[1:]
  2. 使用os.walk递归获取当前工作目录下所有文件的路径并加密。
  3. 两者的结合。如果sys.args[1:] 中的路径是文件(使用os.path.isfile 测试),请对其进行加密。如果是目录(使用os.path.isdir 测试),使用os.walk 查找该目录中的所有文件并加密。

【讨论】:

  • 非常感谢,我会继续尝试;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多