#文件加密 #加密解密 #目录 #源文件 #工具 #命令行工具 #透明

app ecrypt

命令行工具,轻松加密和解密文件或目录

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