#file #back #turn #secret #encryption #again #de-gibberish

app gibberish

将文件转换成乱码,然后再转回来

1 个不稳定版本

0.1.0 2019年3月8日

#2153密码学

MIT 许可证

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