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

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

9074 次点击
所在节点    分享创造
154 条回复
crazytec
2022-01-13 21:48:41 +08:00
@SuperMild 密钥延伸啊
hanguofu
2022-01-13 21:59:23 +08:00
我也觉得楼主的方法其实就是用另一种方式记下密钥。谢谢分享!
2i2Re2PLMaDnghL
2022-01-13 22:23:34 +08:00
@SuperMild 那么,资本家到底是出于什么目的去扫描这些用户的呢?
杀头的生意有人做,赔本的生意没人做。
WuSiYu
2022-01-14 06:25:00 +08:00
其实和普通加密且把秘钥硬编码在程序里没区别,如果要“加密”后没次都不一样的话,加密时随便加点额外的随机数据就行了
SuperMild
2022-01-14 08:19:39 +08:00
@WuSiYu 把密钥硬写在程序里,就要保管密钥,或者要担心这个程序丢失。

而我这个做法,最主要的目的之一是完全不管密钥,我写的这个程序也不怕丢失,我只需要记得密钥镶嵌方式即可,而镶嵌方式比密码好记很多(举个例子:密钥在密文的第 15 个字符起算,取出密钥后把密钥的前 15 个字符放到末尾。只要我记得这个大概的逻辑,就算忘记了具体是 15 ,也能轻松破解,但陌生人拿到我的密文,就极难破解。)

也就是说,密钥永远和密文在一起,我记得镶嵌方式的大概逻辑,我就有信心破解它,从此我只需要用这个程序加密、解密,过程中不需要输入密码,也不需要管理密钥,便利且安心。
lisongeee
2022-01-14 10:30:41 +08:00
我都是直接用 zip 加密,然后把密码写在文件名上
SuperMild
2022-01-14 10:41:12 +08:00
@lisongeee 也行,是一个比我的方法更便利,但安全性也更低的方案。

有人觉得我的方案还是不够安全,总之各有各的想法,各有各的有缺点。
llh880808
2022-01-14 18:14:06 +08:00
用楼上 zip 加密+文件名的方案稍加优化, 比如文件名逆序作为密码, 或者文件名的一部分作为密码, 或者固定前缀+文件名才是密码, 这个前缀可以很短很好记, 这样的方案安全性不会输给你吧, 而且便利性更好
SuperMild
2022-01-14 19:34:06 +08:00
@llh880808 文件名太容易不小心修改了,而且也有必须修改文件名的场景。

举个例子,我自己在上传文件到对象储存时,由于对象储存对“用文件名的开头来检索”进行了优化,我会让上传程序自动添加一些前缀到文件名。

有时也会添加标签到文件名帮助搜索。另外我也有别的情况会改文件名,就不一一列举了。
lucybenz
2022-01-17 09:38:51 +08:00
思路可行,1 、创建一种自解压的压缩格式,然后使用密码压缩,压缩时把密码按特定规则附加到压缩文件中;
2 、分享给他人时,对方使用自解压,需要输入密码;
3 、你自用时使用专用解压软件,无需输入密码自动解压,你也可以随时用自己的专用软件读取压缩包密码,分享给他人;
yesterday17
2022-01-18 00:21:52 +08:00
镶嵌从个人角度来看确实是更倾向于编码,但编码又何尝不是一种古典密码呢(笑)
SuperMild
2022-01-18 08:13:11 +08:00
@yesterday17 用生日日期作为种子算出密钥,这一步不是加密,但用这个密钥加密没人质疑是编码。

而我把密钥镶嵌到密文里,这一步当然不是加密,但从整体上看,有两个特征:

1. 比用生日日期 /电话号码作为种子更安全
2. 仅从密文看,多份密文无法相互对照,没有普通编码的缺点,对于解密者来说只能当作普通加密来破解。
gugu33
2022-01-27 05:54:14 +08:00
加密和编码同源而异途罢了。 原文变密文,通俗讲就是给原文套壳。op 新造个轮子自用不公开,在别人眼里这文件就是个未知格式。算法就是你的脚本,密码就是 15 ,没有这两样当然不好破。不过你现在公开了脚本思路了,密码也不可能用太复杂的, 我想度盘扫描模块程序员也已经关注到了
SuperMild
2022-01-27 09:21:37 +08:00
@gugu33 不怕的,因为,从度盘的角度看,他们监控到一万个用户共上传了 100 万份加密文件,但,这些文件里哪些是正常加密的,哪些是用我这种方法加密的,他们却不知道。

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

https://tanronggui.xyz/t/827768

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

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

© 2021 V2EX