预计有 100MB 的数据要进行加密,通过某种传输方式传输到客户端后,再进行解密。推荐使用什么算法?

2021-03-01 16:43:25 +08:00
 ReputationZh
  1. 数据格式是 tar.gz
  2. 不采用解压密码方式
7367 次点击
所在节点    程序员
62 条回复
muzuiget
2021-03-02 04:20:15 +08:00
带密码的压缩文件,本身就是加密了压缩文件内部的数据区,内部加密可以用任何加密算法,加密时选择“同时加密文件列表”就行,何必还多此一举再找别的方法,
xuegy
2021-03-02 05:48:41 +08:00
你直接给客户端开一个 shadowsocks 呗,又不一定是要用来当梯子,完美实现你的需求。
deepdark
2021-03-02 08:12:21 +08:00
复杂一点的压缩密码就好,或者加密完了再用 gpg 加密一次
shilyx
2021-03-02 09:17:08 +08:00
楼主考虑的对,很多留言者没考虑到需求点在哪

有人说 tls,那是对过程加密。过程上的监听者就是个假想敌,如果有人想从链路上截获你的数据的话,你基本拒绝不了。技术上拒绝,生理上也拒绝不了,多说无益。几乎没有人在链路上截获你。
但不是说不用 tls,有条件还是要上。

解压密码,最简单的是调用 7z.exe 解压,密码很容易在使用中被抓到。就算你继承了动态库、静态库,关键调用还是很容易被分析出来。如果是源码级魔改并融合 7z,那工作量是直线上升。
就算解决了加密问题,100M 的文件常规思路还是解压到临时目录来使用,很容易被发现的。全加载到内存,按数据结构组织后轻松上 500M 。

楼主的需求可以总结为:
1 、文件到了终端,依然作为一个格式不明的加密文件存在
2 、加密文件支持随机读取,不一定要读取就全部解密

推荐基于 aes 搞一个自己的加密算法。
aes 仅仅是对 16 字节的输入给出 16 字节的输出而已,距离直接应用还有一段距离。需要选择一种模式,简单的 ecb 或好一些的 cbc,密码用二进制,加密文件格式分好段,做好 padding 和校验。这一切自己完成的话,光凭一个文件,几乎是破解不了。
wakzz
2021-03-02 09:18:29 +08:00
AES
linbingcheng
2021-03-02 09:26:37 +08:00
SSL
zhaohao
2021-03-02 09:29:32 +08:00
那就用 PGP 了,你用对方公钥加密文件,对方私钥解密。
meloncc
2021-03-02 09:32:32 +08:00
sm2+sm4
dream10201
2021-03-02 09:33:02 +08:00
国家下一代战机原理图?
Slartibartfast
2021-03-02 09:36:43 +08:00
记得之前有人说解压密码特别好破解,随手扔了一个加密后的 rar 给他约定父子局。

从此他就再也没出现过。
yy77
2021-03-02 09:42:05 +08:00
https://www.openpgp.org/ 应该就是应对这种需求的。
no1xsyzy
2021-03-02 10:19:11 +08:00
DoctorCat
2021-03-02 10:43:33 +08:00
不想用密码就用非对称加密好了,不想自研算法就用 SSH 建立管道传输就好了,实现了数据压缩、端到端明文,传输过程被加密。
3dwelcome
2021-03-02 10:53:17 +08:00
@shilyx "推荐基于 aes 搞一个自己的加密算法。"
AES 是最好破的,因为都是调用通用的 C 库,编译后代码都大同小异,可识别度很高。
很容易在调用函数的时候,各种参数被反汇编出来。
libook
2021-03-02 10:53:20 +08:00
@ReputationZh 我把你回复我的信息拆分成两个独立的需求:
1. 不让其他人看到文件内容:压缩包的加密功能就可以用,不想用压缩包的加密可以自己用 OpenSSL 给文件加密,具体教程可以去网上搜。算法的选择看你要多么强的安全等级,以及能接受多么复杂的使用过程和多么长的加解密时间,这个也可以去搜各种加密算法的对比。
2. 不让人篡改文件的内容(或者知道文件有没有被篡改过):可以用哈希或基于非对称加密的签名算法,哈希简单来讲就是算个 SHA1 、SHA2 、SM3 等,如果文件被篡改,这个值是会发生变化的;用哪一种取决于你需要多强的安全等级,同样,安全的等级越强,计算需要的时间越长。签名算法也可以使用 OpenSSL 来实现,具体可以去搜一下教程。

如果你两个都需要,可以两个都做
653513754
2021-03-02 11:08:00 +08:00
@52icarus vx 好像是这种流程
libook
2021-03-02 11:09:20 +08:00
主流的加密算法强度已经足够好了,没有被发现漏洞所以只能暴力破解,而暴力破解基本上就是搞一个常用密码的字典,然后一个个试,都不行的话就任意组合字符尝试,你只要确保你的密码不包含任何常见字符串且位数足够长就行了。

安全上有个说法是打破物理隔离没法谈安全,如果你读取文件的设备上已经被装了各种监视程序来打探你读取文件的细节,那么基于计算机软件的任何安全措施都没有用,最底线就是要做到物理隔离,确保最终使用的设备环境是安全的。

然后这个问题可能是个 XY problem,为什么不用解压缩密码,为什么格式必须是 tar.gz ,以及使用场景的细节是怎样的;这些说详细了大家可能可以提供更好的方案。
shawndev
2021-03-02 11:28:27 +08:00
openpgp,提前交换公钥后通过数字信封格式加密封装。
newmlp
2021-03-02 12:12:23 +08:00
aes 加密文件,rsa 传输加密密钥
beijiaoff
2021-03-02 13:20:57 +08:00
lz 你给了用户密码,对用户来说岂不是没有加密的状态了。

是不是需要的实际是另外一种需求,没有密码,谁都可以运行,但没办法知道内部数据组成方式。

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

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

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

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

© 2021 V2EX