4 个版本 (2 个重大变更)

0.5.0 2022年9月3日
0.4.0 2022年9月3日
0.3.2 2022年9月3日
0.2.1 2022年9月2日
0.1.0 2022年9月1日

#601构建工具

Download history 101/week @ 2024-04-08 137/week @ 2024-04-15 112/week @ 2024-04-22 74/week @ 2024-04-29 22/week @ 2024-05-06 22/week @ 2024-05-13 161/week @ 2024-05-20 72/week @ 2024-05-27 69/week @ 2024-06-03 336/week @ 2024-06-10 311/week @ 2024-06-17 123/week @ 2024-06-24 339/week @ 2024-07-01 167/week @ 2024-07-08 170/week @ 2024-07-15 351/week @ 2024-07-22

每月下载量 1,028

MIT/Apache

10KB

envcrypt

envcrypt on crates.io envcrypt on docs.rs envcrypt on deps.rs

envcrypt 是 env!option_env! 的嵌入替换,在编译时加密变量,在运行时解密。

虽然仍然可以逆向工程值,但 envcrypt 阻止 strings <my-binary> 试图找到嵌入的秘密。更多信息请参见 详情

用法

envc!option_envc! 宏可以作为 env!option_env! 的直接替换使用。

作为 env! 的替换

use envcrypt::envc;

let my_super_secret_key: &'static str = envc!("SECRET_KEY");
// ...do stuff with your secret key

作为 option_env! 的替换

use envcrypt::option_envc;

if let Some(optional_value) = option_envc!("OPTIONAL_SECRET_KEY") {
  // ...do stuff
}

dotenvy 一起使用

.env:

CLIENT_SECRET="my_client_secret"
SOME_TOKEN="some_token"

build.rs:

use dotenvy::dotenv_iter;

fn main(){
 println!("cargo:rerun-if-changed=.env");

 for item in dotenv_iter().unwrap() {
   let (key, value) = item.unwrap();
   println!("cargo:rustc-env=${key}=${value}");
 }

}

main.rs:

use envcrypt::envc;

let client_secret: &'static str = envc!("CLIENT_SECRET");

详情

加密功能由 RustCrypto 提供,使用 ChaCha20Poly1305 加密。

虽然这是一个安全的算法,但它的使用方式非常不安全,因此不适合需要真正加密安全性的用例。《code>envcrypt通过在编译时加密环境变量,然后将加密的变量和加密密钥嵌入到您的二进制文件中来实现。

这意味着黑客仍然可以解密您的机密信息,但不像运行strings那样简单。

这里有一个类比:与其让您的前门敞开(在二进制文件中嵌入裸字符串),不如关闭并锁上门,把钥匙放在地毯下(嵌入加密密钥)。罪犯仍然可以轻易地闯入您的房子,但仅仅是关闭和锁上门就足以阻止大多数人。

您可以通过在编译后的输出上运行strings来检查您的机密信息是否在二进制文件中可见

$ cat envcrypt-test/src/main.rs

use envcrypt::envc;

fn main() {
    println!("{}", envc!("ENCRYPTED_KEY"));
    println!("{}", env!("NAKED_KEY"));
}

$ cat envcrypt-test/build.rs

fn main() {
    println!("cargo:rustc-env=ENCRYPTED_KEY=ENCRYPTED_VALUE");
    println!("cargo:rustc-env=NAKED_KEY=NAKED_VALUE");
}

$ cargo build -p envcrypt-test
   Compiling envcrypt v0.2.0 (path/to/envcrypt)
   Compiling envcrypt-test v0.0.0 (path/to/envcrypt/envcrypt-test)
    Finished dev [unoptimized + debuginfo] target(s) in 1.73s


$ strings - target/debug/envcrypt-test | rg VALUE
NAKED_VALUE

以下是自行在MacOSLinuxWindows上运行strings的说明。

依赖项

~1MB
~16K SLoC