mYYnSmiTEQWcCwAr
V2EX  ›  问与答

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

  •  
  •   mYYnSmiTEQWcCwAr · Jan 20, 2018 · 2827 views
    This topic created in 3131 days ago, the information mentioned may be changed or developed.

    问题情景

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

    需要的特性

    不占用大量内存——例如 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 replies    2018-01-20 20:45:21 +08:00
    julyclyde
        1
    julyclyde  
       Jan 20, 2018   ❤️ 1
    首先,zip 不是流式而是 archive
    mYYnSmiTEQWcCwAr
        2
    mYYnSmiTEQWcCwAr  
    OP
       Jan 20, 2018
    @julyclyde 确实如此,但如果 zip 不做压缩应该可以实现流式 写好文件头和末尾的文件列表(中心目录)就行
    而且 zip 的加密并不安全 可以已知明文攻击

    考虑要不要换种格式呢?只要方便打开 能加密就行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5286 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:34 · PVG 17:34 · LAX 02:34 · JFK 05:34
    ♥ Do have faith in what you're doing.