一种不需要密码的加密方法(用于防止网盘扫描等场景)

2022-01-12 11:28:28 +08:00
 SuperMild

安全与便利总是难以兼顾,记忆密码或管理密码,加密或解密时输入密码等操作如果能彻底免除,会非常便利,但是安全性也自然会降低。

幸好,日常生活中有些场景本身就不要求很高的安全规格,只需要稍稍加点防护就足够了。

比如上传到网盘,只要不被轻易扫描、或者万一泄露文件时让人看着一堆乱码不乐意花时间精力去解密,就足够了。

因此,我想到了把密钥直接内嵌到密文里的方法,从此不需要记忆或管理密码,因为密码就在密文里,解密时也不需要填写密码,用脚本自动化提取密码就可以解密了,方便到极致!

当然,该方法只适用于大多数普通文件,不适用于真正的机密。

听起来不靠谱?(原理)

其实很靠谱,因为:

  1. 一般人根本想不到密码就在密文里
  2. 就算想到了,也不知道具体位置
  3. 如果我把一个密钥拆成 3 段,分别镶嵌在不同位置,就更难猜了
  4. 如果我把密钥拆成 N 段,并且调换顺序后再镶嵌进密文里,你还乐意去猜吗?

而加密解密却很方便,不需要记住密码,因为程序可以自动化提取密钥。

即便如此,当然还是不适用于真正的机密,但日常大多数文件这样处理已经足够安全了。

开源脚本

不久之前我做了一个命令行工具框架,用来管理零散的脚本,这个加密脚本也是其中的一个插件。

安装框架的方法看这里: https://github.com/ahui2016/ffe/blob/main/docs/usage.md (简单来说,pip install ffe 就可以了,要求 python 3.10+)

安装了 ffe 之后,用以下命令安装这个加密解密脚本:

ffe install -i https://github.com/ahui2016/ffe/raw/main/recipes/mimi.py

如果遇到网络问题,也可以使用 gitee 地址:

ffe install -i https://gitee.com/ipelago/ffe/raw/main/recipes/mimi.py

最后安装依赖 pip install cryptography (只依赖这一个第三方库)

使用方法

可见,加密解密过程都不需要输入密码。

使用命令 ffe dump -r mimi file.txt > mimi.toml 可以生成一个 mimi.toml 文件,以后可以使用命令 ffe run -f mimi.toml 来执行相同的任务,这对于需要经常重复的操作来说是很方便的。而且,在 toml 文件里还可以添加别的任务(比如打包压缩),一次性依次执行一系列任务。

关于 ffe

ffe 是一个命令行插件框架,可以用 Python 来写插件,多个插件可组合使用,适合用来管理零散的脚本。后续我还会发帖介绍我写的插件,比如免费上传文件到云端。多个文件组合后,使用一个命令 ffe run -f <toml file> 即可一次性执行打包、加密、上传,toml 文件的编辑也很直观。

9072 次点击
所在节点    分享创造
154 条回复
SuperMild
2022-01-12 18:43:09 +08:00
@des 密码、密钥、gpg…… 需要管理私钥、保管私钥。

我这个方法不用保管脚本,脚本丢失了也无所谓,只要我记得镶嵌方式(而这个方式可以很简单),就可以随手写个脚本来解密。
des
2022-01-12 18:43:11 +08:00
@SuperMild
那你管理加解密脚本不一样需要保管?甚至还有安全问题
GrayXu
2022-01-12 18:43:21 +08:00
@Greenm +1 ,估计 OP 没有一些基本的密码学知识。不过 OP 的需求下,确实编码策略也能满足。
NeezerGu
2022-01-12 18:44:45 +08:00
成本太高了, 觉得国内的网盘不靠谱用国外的就是了。。
都信不过上 nas 就行
SuperMild
2022-01-12 18:46:37 +08:00
@des 我的加密脚本不怕丢失啊。私钥我怕丢失。

安全问题不大,因为我已经知道安全程度不高,并不会拿来加密真正的机密。我主要用来加密临时文件的。
des
2022-01-12 18:47:46 +08:00
加密脚本凭什么就不怕丢了?
你放哪里?放 github 吗?
timethinker
2022-01-12 18:49:16 +08:00
@SuperMild 思路值得鼓励,希望你可以一直对此保持热情。
des
2022-01-12 18:51:36 +08:00
还是想说丢了能重新写?那和记密码有什么区别?甚至把私钥 zip 加个密码都比你这安全

现有工具甚至还有直接挂载一系列功能,你这个有啥?
SuperMild
2022-01-12 18:52:19 +08:00
@des 我是指不小心删除,或者硬盘故障无法恢复那种丢失。

我的脚本本身很简单,随手就可以写,把密钥镶嵌到密文的镶嵌方式也可以很简单,不需要搞得很复杂。
des
2022-01-12 18:54:13 +08:00
要是为了备份,可以看看 Borg 。都是现成的,说不定正好满足你的需要
可以挂载,去重,多版本,文件切片
SuperMild
2022-01-12 18:56:19 +08:00
@des 密码短了不舒服,长了要管理,保存密码的地方我要担心硬件损坏。

用我这个方法,完全不用管什么密钥、密码,便利是增加了没错吧?安全系数降低了我也承认啊。
des
2022-01-12 18:57:03 +08:00
@SuperMild 脚本不一样能丢?到时候你还能记得你写的啥?
多少人吐槽自己以前的代码看不懂,那还是有代码,真不信你能记得了。你要能记这个,记个密码,背个私钥算啥?
Mutoo
2022-01-12 18:57:11 +08:00
这个和把钥匙放在家门口的花瓶底下有异曲同工之处。
zhy0216
2022-01-12 19:00:22 +08:00
如果是防止网盘扫描的话
https://github.com/rfjakob/gocryptfs
这个项目很厉害
des
2022-01-12 19:01:00 +08:00
@SuperMild 便利不见得增加了
想象一下,你为了加密服务器的文件然后备份,然后四处找脚本放哪里了
为了看一张照片先得解密然后才能看,人家直接挂载就能看
还有如果想在手机上看呢?
des
2022-01-12 19:03:12 +08:00
如果有一堆文件要加密呢?想要文件名加密呢?
des
2022-01-12 19:05:06 +08:00
当然这些都可以自己写,就看你觉得这能不能便利到你自己了
SuperMild
2022-01-12 19:08:14 +08:00
@Mutoo 不对,我这个钥匙被截成了 N 块,每一块看起来像普通的石头,混在门前的石头堆里。


@des 我这个脚本的解密功能是(举个例子):密钥在密文的第 15 个字符起算,取出密钥后把密钥的前 15 个字符放到末尾。仅此而已,记住 15 就可以了。但拿到密文的人,如果不知道我用的这种方法,也很难猜啊,而且也不会往这个方向猜。
des
2022-01-12 19:12:36 +08:00
那我只能说,但愿你多年后还记得吧。
SuperMild
2022-01-12 19:18:34 +08:00
@zhy0216 gocryptfs 需要设置 master key ,而我就是不想管理 master key 才做的这个脚本啊。


@des 一堆文件的问题我已经解决了,我做了一个打包脚本…… 我也是最近才突然爱写脚本,以前也没有玩这些。

当然,没有完美的方法,我只能满足自己的需求,其他人各自找适合自己的方法,比如上面也很多人提出了自己的方法。我觉讨论这些蛮好的,比讨论社会新闻舒服😂

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

https://tanronggui.xyz/t/827768

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

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

© 2021 V2EX