1 个不稳定版本
0.1.0 | 2019年3月8日 |
---|
#2153 在 密码学 中
14KB
127 行
将文件转换成乱码,然后解码以恢复原始文件。也称为加密,但我们不想显得过于自负,而且如果不对密码进行设置,乱码并不是真正的秘密。
安装
如果您已经安装了 Rust 工具,则可以使用 Cargo
cargo install gibberish
如果没有,您需要等待一段时间。Gibberish 正在开发中,目前还没有预编译的二进制文件。
用法
使用 gibberish
命令加密文件
$ gibberish file.png
Gibberish written to file.gibberish
(“engibberish”这甚至是一个词吗?嗯,现在它肯定是一个词了……)
然后使用 gibberish -d
解密文件
$ gibberish -d file.gibberish
Decoded gibberish to file.png
乱码文件格式存储扩展名。您可以使用它对任何类型的文件进行编码,所有文件都将编码为您选择的扩展名(默认为 'gibberish'),并解码为原始扩展名。
高级用法
密码锁定
您可以为您的乱码设置密码
$ gibberish -p secret.png
Passphrase:
Confirm passphrase:
Gibberish written to secret.gibberish
$ gibberish -d -p secret.gibberish
Passphrase:
Decoded gibberish to secret.png
这会生成类似的外观乱码,但它将使用您提供的密码进行加密。加密标准是 NaCl 的 Secretbox(xsalsa20poly1305),密码通过使用 libsodium 的默认密码哈希器(scryptsalsa208sha256)生成。简单来说,它足够强大,以至于您的密码将成为最薄弱的环节。
文件扩展名
您可以为输出乱码设置任何扩展名
$ gibberish -e docx hidden.png
Gibberish written to hidden.docx
$ gibberish -d hidden.docx
Decoded gibberish to hidden.png
需要注意的是,所有乱码文件都是加密的,但如果您没有提供扩展名,输出文件的扩展名就是密码。换句话说,file.gibberish
使用 "gibberish" 作为密码进行加密,而 hidden.docx
使用 "docx"(除非您自己设置密码)。
这意味着,如果您将 hidden.docx
重命名为,例如,hidden.xlsx
,则无法解密,因为它将尝试使用 "xlsx" 作为密码,而它实际上是使用 "docx" 加密的。
$ gibberish -e docx hidden.png
Gibberish written to hidden.docx
$ mv hidden.docx hidden.xlsx
$ gibberish -d hidden.xlsx
Error: failed to decode gibberish
在这种情况下,只需将原始扩展名(在这种情况下为 "docx")作为密码输入即可
$ gibberish -d -p hidden.xlsx
Passphrase:
Decoded gibberish to hidden.png
动机
乱码旨在为通过自动化过滤器交换文件提供一种干净、简单的方式。比如说,你想要发送一个 meme.gif
文件给某人,但你所使用的聊天应用出于某种奇怪的原因禁止了 gif 文件,或者处理它们并在过程中破坏了质量。或许你想要发送一张 photos.rar
归档,其中包含了你上次旅行的照片,但应用出于对有人将病毒放入其中的恐惧而禁止了 rar 文件。我们都见过这些过滤器,虽然它们显然有一些用途,但它们常常走得太远,变得麻烦。
使用乱码,你可以轻松解决这个问题。你只需将文件转换成乱码,然后你的接收者就可以解乱码文件。简单、干净、容易。不需要密码锁定的 rar 文件或其他疯狂和复杂的东西。
文件格式
乱码文件由三个连接的二元字段组成
名称 | 长度 | 描述 |
---|---|---|
盐值 | 32 字节 | 密码散列的盐值 |
nonce | 24 字节 | secretbox 的 nonce |
内容 | 文件的其余部分 | 一个包含文件的 secretbox |
在 secretbox 内部,有一个 MessagePack 对象,布局如下
Map {
"extension": String,
"file": Binary
}
其中 "extension" 字段的值是原始文件扩展名,与 "file" 键相关联的值是原始文件的内容。
过滤避免
虽然格式简单,但这种文件很难过滤。
- 文件本身看起来完全随机。内容字段看起来随机,其他两个字段实际上也是随机的。没有魔数,没有公共元数据,没有将乱码与随机二元区分开来的东西。你可以说是看起来像乱码。
- 任何文件,任何扩展名都可以是乱码,它不仅限于
*.gibberish
。 - 即使密钥是公开的(乱码没有设置密码,也没有重命名)你也需要散列整个文件来检测乱码。
- 即使你做了上面的检查,用户也可以轻松重命名文件,使用不同的扩展名,或设置密码,使你的过滤器无效。
乱码的目的是你必须 并且理解 对话来区分它和随机性,而这只有人类才能做到。至少现在是这样。
如果你是乱码的用户,正在阅读这个,请设置一个密码并告诉你的接收者。
待办事项列表
虽然核心算法已经就绪,但乱码在准备好投入使用之前还需要进行重大的质量改进,包括
- 一个简单、友好的用户界面
- 预编译的二进制文件,因为没有人会安装 rustup
- Windows(以及可能 Linux)上的 shell 集成
- Mac 支持?如果你为这些事物开发,欢迎 PR
- 移动应用程序(首先要弄清楚 UX 应该是什么样子)
- 一个网站,也许(优先级低)
如你所见,乱码在这个阶段几乎只是一个概念证明。
贡献
欢迎拉取请求、问题和想法,请随意像在 Reddit 上使用 GitHub。只有几条规则:不要做任何违法的事情,互相尊重。
乱码受 MIT 许可证保护。
依赖项
~23–32MB
~243K SLoC