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

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

  •  
  •   cy97cool · 31 天前 · 332 次点击
    这是一个创建于 31 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题情景

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

    需要的特性

    不占用大量内存——例如 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
        1
    julyclyde   30 天前   ♥ 1
    首先,zip 不是流式而是 archive
        2
    cy97cool   30 天前
    @julyclyde 确实如此,但如果 zip 不做压缩应该可以实现流式 写好文件头和末尾的文件列表(中心目录)就行
    而且 zip 的加密并不安全 可以已知明文攻击

    考虑要不要换种格式呢?只要方便打开 能加密就行
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1401 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 42ms · UTC 11:59 · PVG 19:59 · LAX 03:59 · JFK 06:59
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1