如何在 Python 中加密大文件?

How do I encrypt large files in Python?

提问人:ShadowProgrammer 提问时间:7/31/2023 更新时间:7/31/2023 访问量:104

问:

我正在用 Python 制作防病毒软件(为了好玩),我正在尝试加密恶意文件,使其无法传播和访问。我想使用像 RSA 这样的公钥-私钥系统对其进行加密。

这是我目前使用 Flask 的代码:

@app.route('/getstatus', methods=['GET'])
def getstatus():
    values = request.get_json()
    id = values['id']
    size = values['size']
    if id in IDS:
        status = IDS[id]['status']
    else:
        pubkey, privkey = rsa.newkeys(size)
        IDS[id] = {'id': id, 'status': 'INFECTED', 'pubkey': pubkey.save_pkcs1("PEM").decode('utf-8'), 'privkey': privkey.save_pkcs1("PEM").decode('utf-8')}
        status = 'INFECTED'
    with open("ids.json", "w") as f:
        json.dump({'ids': IDS}, f)

    return jsonify({'status': status})

在将最大的文件发送为密钥大小之前,我会跟踪它(乘以 8 以允许填充) 但我的问题是,即使对于图像和文本等较小的文件,生成密钥也需要非常长的时间。有没有更快的方法可以使用公钥和私钥加密这些文件?

顶级域名; 我确保不能在客户端设置任何内容,以便病毒无法禁用防病毒软件。RSA 注册机太慢。有没有更快的公钥/私钥系统?

Python 性能 安全 加密 RSA

评论

0赞 Olaf Dietsche 7/31/2023
我不是安全专家,但 AFAIK 你不会创建这么大的密钥。如果它必须是每个文件的单独密钥,则可能执行 2048 或 4096 位。否则,我只会为此目的预先创建一个密钥并使用它。
0赞 Frank Yellin 7/31/2023
如果您使用的是 RSA,则密钥大小通常为 1024、2048、4096、8192,或者在最极端的情况下为 16k。密钥大小不是文件大小。正如上面@OlafDietsche所说,通常的用法是你只选择一个与你所加密的内容无关的密钥。
0赞 ShadowProgrammer 7/31/2023
@OlafDietsche是的,我知道它们彼此独立,但即使创建一个长度为 4096 的键也会导致一条错误消息,指出它太小了
3赞 Jérôme Richard 7/31/2023
像RSA这样的非对称密码系统通常并不意味着加密任何大数据。它们用于在不安全的通道上安全地交换密钥,以便使用此密钥和对称密码系统加密数据(例如,像大文件一样)。此外,众所周知,RSA 速度很慢。目前的标准是AES(Rijndael)。AES 非常安全,只要密钥是强的,而不是共享的,在安全的地方,并且使用的 bloc 方法也很强。AES-256 非常安全,实际上被 NSA 用于绝密信息。请注意,AES 可以由 x86-64 CPU 本地计算,以达到相当高的带宽。
0赞 Maarten Bodewes 7/31/2023
只需使用混合密码系统即可。加密用于加密文件的随机 AES“数据”密钥。将加密的 AES 密钥与文件一起存储。如果你想对每个文件使用一个公钥,那么你最好使用ECIES,但是的,这是一个更大的学习曲线。通常,非对称密钥对是静态密钥(因为您需要信任公钥)。

答: 暂无答案