Python加密大文件



此脚本是XOR Encrypt函数,如果加密小文件,但是我试图打开加密大文件(约5GB)错误信息:

"溢流:尺寸不适合int" ,打开太慢。

任何人都可以帮助我优化我的脚本,谢谢。

from Crypto.Cipher import XOR
import base64
import os
def encrypt():
enpath = "D:\Software"
key = 'vinson'
for files in os.listdir(enpath):
    os.chdir(enpath)  
    with open(files,'rb') as r:
        print ("open success",files)
        data = r.read()
        print ("loading success",files)
        r.close()
        cipher = XOR.new(key)
        encoding = base64.b64encode(cipher.encrypt(data))
        with open(files,'wb+') as n:
            n.write(encoding)
            n.close()

在我的评论上展开:您不想一次将文件读取到内存中,而是在较小的块中处理。

使用任何生产级密码(绝对不是XOR),如果源数据不是密码块大小的倍数,您还需要处理填充输出文件。该脚本不处理该脚本,因此关于块大小的断言。

另外,我们不再是不可逆转的(除了XOR密码实际上是直接可逆的)使用其加密版本的覆盖文件。(如果您想这样做,最好只添加代码即可删除原件,然后将加密文件重命名到其位置。这样,您就不会最终会得到一个半写的,半封闭式文件。)

另外,我删除了无用的base64编码。

但是 - 不要将此代码用于严重的事情。请不要。朋友不喜欢自己的加密货币。

from Crypto.Cipher import XOR
import os

def encrypt_file(cipher, source_file, dest_file):
    # this toy script is unable to deal with padding issues,
    # so we must have a cipher that doesn't require it:
    assert cipher.block_size == 1
    while True:
        src_data = source_file.read(1048576)  # 1 megabyte at a time
        if not src_data:  # ran out of data?
            break
        encrypted_data = cipher.encrypt(src_data)
        dest_file.write(encrypted_data)

def insecurely_encrypt_directory(enpath, key):
    for filename in os.listdir(enpath):
        file_path = os.path.join(enpath, filename)
        dest_path = file_path + ".encrypted"
        with open(file_path, "rb") as source_file, open(dest_path, "wb") as dest_file:
            cipher = XOR.new(key)
            encrypt_file(cipher, source_file, dest_file)

相关内容

  • 没有找到相关文章

最新更新