1个不稳定版本

0.1.0 2024年4月10日

#720密码学

MIT/Apache

16KB
207

Lockit

Lockit 是一个小型命令行程序,用于使用强加密保护您的文件。

安装

$ cargo install lockit

用法

显示帮助。

$ lockit -h  # Use --help for the long help message.

加密文件。

$ lockit -e secret.txt

解密文件。

$ lockit -d secret.txt

增加KDF的HMAC函数的哈希迭代次数。这增加了破解您密码的计算成本。解密文件时需要传递相同的迭代次数。

$ lockit -e -i 1000000 secret.txt

技术细节

默认情况下,Lockit 对您的密码应用 PBKDF2,迭代次数为 200,000 次 HMAC-SHA512,并使用随机 16 字节盐生成密钥,然后使用 AES-256Galois/Counter 模式 (GCM) 中加密文件。此操作模式提供了机密性(即数据无法读取)和完整性(即数据不能被秘密篡改)。

免责声明

这是我作为一名Rust新手的作品,我将其分享在这里,作为其他人可能的资源和学习资源,并展示一些我新学到的Rust技能。

我最近刚刚读完 《Rust编程语言》,并正在寻找一个项目来帮助我在Rust中编写软件更加舒适,并利用可用的 crates。我尝试了许多自己动手做X教程,但发现我做了很多代码示例的复制粘贴,而没有真正自己思考。因此,我没有从设计Rust软件中获益。

我最终决定从这些跟随式教程中休息一下,尝试自己实现一些我认为有趣和有趣的东西。密码学是我主要兴趣之一,因此我选择编写一个文件加密/解密工具!

如果您想亲自尝试,那么这是我的建议:请不要阅读此存储库中的源代码。实现您自己的应用程序版本,一旦您对产品满意,您就可以自由地将我的代码与您所写的内容进行比较,同时记住,您的解决方案可能非常好。

以下是实现各个组件的大致顺序。

  1. 命令行选项/参数解析
  2. 从终端读取密码
  3. 将密码转换为密钥
  4. 将文件读入内存
  5. 将文件写入磁盘
  6. 数据加密
  7. 数据解密

在我的实现中(约300行代码),我使用了以下crate,但我鼓励你寻找替代方案

crate 描述
anyhow 改进的错误消息,带有可选上下文
clap 命令行参数解析
ring 密码学原语
rpassword 从控制台读取密码
tempfile 临时文件,有助于防止数据丢失
thiserror 轻松创建自定义错误类型
zeroize 安全地从内存中清除机密信息

寻找、评估和比较你可用于选择适合你用例的crate是非常重要的软件开发环节。阅读文档也同样重要,我希望你在尝试使用所选crate时能够获得大量实践。

依赖项

约8–17MB
约333K SLoC