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

2018-01-20 15:07:58 +08:00
 cy97cool

问题情景

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

需要的特性

不占用大量内存——例如 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 库) 可用性低

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

考虑要不要换种格式呢?只要方便打开 能加密就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX