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

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 文件的编辑也很直观。

8292 次点击
所在节点    分享创造
154 条回复
SuperMild
2022-01-12 11:36:10 +08:00
忘了说,加密方法是流行的 cryptography.Fernet, 并不是啥特殊格式,不需要用我的脚本也是能解密的。
a1105288116
2022-01-12 13:02:34 +08:00
如果别人用同一个脚本是不是也能解开呢?
1423
2022-01-12 13:09:49 +08:00
rar 可以添加备注。备注可以是密码
polaa
2022-01-12 13:31:18 +08:00
无论什么场景 。。。。随便使用一个密钥进行加密不比你这靠谱?
Mohanson
2022-01-12 13:37:34 +08:00
文件每个 byte 按位取反就可以了, 我都是这么干的...
SuperMild
2022-01-12 13:43:23 +08:00
@a1105288116 那肯定的,但要考虑两点:1.极少人用我这个脚本 2.可以修改镶嵌方式。

@1423 但是查看 rar 备注很容易,猜我的镶嵌方式却很麻烦。查康 rar 备注是个很容易想到的做法,猜密钥镶嵌在密文里则是很可能想都没想到这个方向(只要不是被特殊针对)
SuperMild
2022-01-12 13:51:03 +08:00
@polaa 随便使用一个密钥,有 3 个问题:

1. 就要考虑密钥放在哪里。
2. 备份密钥时要考虑如何保护私钥。
3. 还需要记住哪些文件用了这个“低安全级别”密钥,哪些文件用了用了“高安全级别”(即平时用来加密重要文件)的密钥。

而采用我这个方案,一切都不需要考虑,一个命令就加密 /解密,密码永远不用管理。


@Mohanson 这也是个好办法,但缺点是花样比较少,上面有人提到别人使用同一个脚本来加密的情况,我这个可以非常方便地改变镶嵌方式,轻松地防止与别人使用一样的方式。
FakNoCNName
2022-01-12 14:19:33 +08:00
过不了网盘的哈希校验
chengkai1853
2022-01-12 14:23:05 +08:00
你这不就类似于把密码写死在加密函数函数里面了嚒。既然小众,那意思就是要好好保存这个加解密脚本,如果脚本找不到了,咱也无法解开了。这和保存密钥貌似没有本质的区别吧?
timethinker
2022-01-12 14:29:02 +08:00
加密 /解密 ✗

编码 /解码 ✔
SuperMild
2022-01-12 14:33:16 +08:00
@FakNoCNName 据我理解,加密了,哈希值就变了。

你可能看错了,我这个是**真**加密啊,唯一与普通高强度加密不同的只是把密钥镶嵌进密文里而已。


@chengkai1853 对……被你一阵见血了,这确实是最大的问题。但也不算很严重的问题,由于明确用于保密等级低的文件,镶嵌方式可以弄得简单一点,只是记住镶嵌方式还是很容易的。不需要保存脚本,只需要记住镶嵌方式。
joesonw
2022-01-12 14:35:08 +08:00
encryption by obstruction
3dwelcome
2022-01-12 14:35:16 +08:00
@SuperMild

1. 就要考虑密钥放在哪里。

这个完全不是问题啊,正常加密密钥都是根据伪随机数生成的,你只要把随机数种子设置为自己生日之类的,就可以了。
SuperMild
2022-01-12 14:39:24 +08:00
@qwe520liao 差别很大。

1. 对于同一个文件,加密后的密文,每次都不一样;编码后的“密文”,每次都是固定不变的。
2. 被人拿到一堆“密文”,如果这一堆都是编码弄出来的,很容易看出规律;而如果是加密,则很难从密文看出规律。
3. 自创编码方式,程序代码复杂,需要保护好程序,不能泄露,也不能丢失。而我用的是真加密,不用自己想如何编码,也不怕程序丢失。

这三点很关键啊。
SuperMild
2022-01-12 14:43:54 +08:00
@joesonw 我正文两次强调 “不适用于真正的机密”,标题也说明了主要用途。

日常大多数文件这样处理已经足够安全了(吧?)
SuperMild
2022-01-12 14:48:54 +08:00
@3dwelcome 这样也是个好办法,但我可能会想,生日也太简单太容易被猜了,电话号码显然也容易被猜,我会有这个纠结,会想用一个特殊点的种子,而一旦特殊,就很容易忘记,结果还是要管理。

但你这个方法确实是好,不纠结的人可以用。
Building
2022-01-12 14:49:31 +08:00
谁管你密码是谁谁谁生日放什么地方什么高级密钥算法,直接暴力破解完事……
SuperMild
2022-01-12 14:59:53 +08:00
@Building 我这个是能防暴力破解的,你看看我说的对不对:

1. 我用的是 32 bytes 的随机密钥,这么长的密钥,而且每次加密都采用不一样的密钥,这个暴力破解要多长时间?

2. 我把密钥分成几段镶嵌进密文里了,也就是说,即使知道密钥,直接去解这个密文也是解不开的,还需要知道密钥的镶嵌方式,把密钥与密文分离开,才能获得真正的密文。
vophan1ee
2022-01-12 15:04:38 +08:00
你这就是一种自己知道的编码呗,也谈不上什么加密,我把文件所有位都 +1 ,只要别人不知道,效果就是一样的
jupiter157
2022-01-12 15:12:25 +08:00
怎么区分加密人和其他人?那就是密钥信息,这个密钥不一定是字符串,也可能是规则,如怎么组合、怎么编码、在哪个位置找到密码、密码本是什么。规则的好处是没发穷举,但本质上和字符串密码没有不同。

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

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

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

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

© 2021 V2EX