V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cy97cool
V2EX  ›  问与答

求问 有什么 Python 库能流式加密产生 zip 加密文件?

  •  
  •   cy97cool · 2018-01-20 15:07:58 +08:00 · 2358 次点击
    这是一个创建于 2287 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题情景

    上传到网盘时需要对文件进行加密,并方便下载者解密(不需要安装额外的软件)

    需要的特性

    不占用大量内存——例如 1GB 的文件拆成多个 10MB 的块,每个块就是个 block,每次处理一个 block 不必占用大量内存

    流式加密——输入一个 block generator,输出一个新的 block generator ;而不需要产生临时文件,也方便串联多个加密函数轻松实现多次加密。反正 requests 进行 POST 上传操作的时候支持 data 为 generator

    产生的是标准的 zip 文件格式——可以不压缩

    Python 内置的 zipfile 并不支持加密

    似乎也不支持流式压缩,并没有输入一个 block 输出一个 block 的接口

    其实 ss 的 cryptor 挺好用的

    我已经写出了一个:

    https://github.com/zjuchenyuan/EasyLogin/blob/master/examples/panzju/encryption_example.py

    def fencrypt_data(data_generator):
        c = cryptor.Cryptor(ENCRYPTION_PASSWORD, ENCRYPTION_METHOD)
        for data in data_generator:
            yield c.encrypt(data)
    

    ss 用的 cryptor 本身就是流式加密的,可以对每个 block 加密产生一个新的 block

    只是不方便下载者解密(需要 python 和 openssl 库) 可用性低

    2 条回复    2018-01-20 20:45:21 +08:00
    julyclyde
        1
    julyclyde  
       2018-01-20 20:35:31 +08:00   ❤️ 1
    首先,zip 不是流式而是 archive
    cy97cool
        2
    cy97cool  
    OP
       2018-01-20 20:45:21 +08:00
    @julyclyde 确实如此,但如果 zip 不做压缩应该可以实现流式 写好文件头和末尾的文件列表(中心目录)就行
    而且 zip 的加密并不安全 可以已知明文攻击

    考虑要不要换种格式呢?只要方便打开 能加密就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2023 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:18 · PVG 00:18 · LAX 09:18 · JFK 12:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.