1 个不稳定版本
0.1.2 | 2023年1月23日 |
---|
#1697 在 密码学
24KB
455 行
ecrypt (简易加密)
命令行工具,轻松加密和解密文件或目录。
加密/解密过程和源代码透明且易于理解,请参阅内部结构部分。
用法
安装
最简单的方法是: cargo install ecrypt
要从源代码构建,您可以克隆存储库并构建发布二进制文件
git clone https://github.com/tirax-lab/ecrypt
cd ecrypt
cargo build --release
sudo mv target/release/ecrypt /usr/local/bin
在子命令(例如,加密使用enc
,解密使用dec
)之后使用 --help
查看所有选项。例如,目录加密支持 -c/--compress
标志,用于tar gunzip压缩。
加密文件或目录
$ ecrypt enc README.md
Encryption password:
[2023-01-23T20:37:31Z INFO ecrypt::enc] Writing encrypted data of file "README.md" to "README.md.encrypted"
[2023-01-23T20:37:31Z WARN ecrypt::enc] The unencrypted file 'README.md' remains on disk, you can remove it manually or run ecrypt with the --remove/-r flag
将创建一个包含加密内容的文件 README.md.encrypted
。
解密文件
$ ecrypt dec README.md.encrypted
Decryption password:
[2023-01-23T20:39:11Z INFO ecrypt::dec] Writing decrypted data of file "README.md.encrypted" to "README.md.decrypted"
将创建一个包含解密内容的文件 README.md.decrypted
。
解密目录
$ ecrypt dec directory.encrypted_dir
Decryption password:
[2023-01-23T20:41:33Z INFO ecrypt::dec] Writing decrypted data of file "directory.encrypted_dir" to "directory.decrypted"
[2023-01-23T20:41:33Z INFO ecrypt::dec] Unpacking tarball of decrypted directory: 'directory.decrypted'
这将创建两个输出:一个 directory.decrypted
文件,它是解密的tar包,已解包以产生 directory
内部结构
本节说明了 ecrypt
如何处理文件/目录加密和解密,以便您可以评估它是否适合您的安全需求。有关背景信息,请参阅 Sylvian Kerkour(Black Hat Rust 的作者)关于Rust文件加密的文章
文件加密
- 用户指定要加密的源文件
- 用户使用
-p
标志或密码提示提供密码 - 使用
argon
对密码进行散列,并生成一个盐 - 使用随机字节生成一个nonce
- 从散列中提取32字节作为密钥,用于使用生成的nonce的
chacha20poly1305
流加密器 - 将盐和nonce写入输出文件的起始位置,该输出文件将具有
.encrypted
后缀 chacha20poly1305
流加密器将字节块加密并写入输出文件,直到读取整个源文件- 最终结果是具有盐和nonce的
file.encrypted
文件,之后是加密数据
文件解密
- 用户指定要解密的源文件,它可能具有
.encrypted
后缀,但这不是必需的 - 用户通过
-p/--password
标志或密码提示提供密码 - 从源文件的开始读取盐和nonce到Rust变量中
- 使用提供的密码和盐,产生与加密时相同的哈希值,并将其用作
chacha20poly1305
流解密器的密钥,并已从文件中读取相同的nonce。如果提供了错误的密码,这个哈希值将不同,解密将失败。 chacha20poly1305
流解密器解密字节块并写入输出文件,该文件将具有.decrypted
后缀,直到读取整个源文件- 最终结果是包含明文的
file.decrypted
文件
目录加密
- 将目录存档为tar包,可选通过指定
-c/--compress
标志进行压缩 - 然后使用文件加密加密此tar包,并输出到
directory.encrypted
- 然后删除未加密的tar包,用户可以指定
-r/--remove
自动删除原始的非tar包目录
目录解密
- 首先使用文件解密解密加密的tar包
- 然后将解密的tar包解包/解压缩到当前工作目录
- 这会产生两个结果:
directory.decrypted
(解密tar包)和directory
(未加密目录)
依赖关系
~7–18MB
~248K SLoC