#加密解密 #加密密钥 #配置 #反序列化 #应用 # #敏感

serde-encrypted-value

一个Serde反序列化包装器,可透明地解密加密值

13次发布

0.4.7 2024年3月5日
0.4.6 2023年1月9日
0.4.5 2022年12月12日
0.4.4 2022年9月28日
0.1.0 2017年3月7日

#278 in 编码

Download history 911/week @ 2024-04-22 1400/week @ 2024-04-29 1007/week @ 2024-05-06 1172/week @ 2024-05-13 898/week @ 2024-05-20 923/week @ 2024-05-27 1183/week @ 2024-06-03 1177/week @ 2024-06-10 963/week @ 2024-06-17 799/week @ 2024-06-24 950/week @ 2024-07-01 872/week @ 2024-07-08 1043/week @ 2024-07-15 1092/week @ 2024-07-22 981/week @ 2024-07-29 820/week @ 2024-08-05

4,053 每月下载量
2 个crate中使用 (通过 witchcraft-server)

Apache-2.0

31KB
687

serde-encrypted-value

文档

Serde反序列化器,可透明地解密嵌入的加密字符串。

应用程序配置通常主要由非敏感信息组成,其中包含一些敏感信息,例如身份验证密钥或cookie加密密钥。在静止状态下将这些敏感值以加密形式存储可以防御在例如复制/粘贴配置时发生泄露,只要加密密钥没有额外泄露。

https://github.com/palantir/encrypted-config-value兼容,但与该库不同,serde-encrypted-value不支持RSA。

用法

假设我们有一个看起来像的conf/encrypted-config-value.key文件

AES:NwQZdNWsFmYMCNSQlfYPDJtFBgPzY8uZlFhMCLnxNQE=

和一个看起来像的conf/config.json文件

{
    "secret_value": "${enc:5BBfGvf90H6bApwfxUjNdoKRW1W+GZCbhBuBpzEogVBmQZyWFFxcKyf+UPV5FOhrw/wrVZyoL3npoDfYjPQV/zg0W/P9cVOw}",
    "non_secret_value": "hello, world!"
}
extern crate serde;
extern crate serde_json;
extern crate serde_encrypted_value;

#[macro_use]
extern crate serde_derive;

use serde::Deserialize;
use std::io::Read;
use std::fs::File;

#[derive(Deserialize)]
struct Config {
    secret_value: String,
    non_secret_value: String,
}

fn main() {
    let key = "conf/encrypted-config-value.key";
    let key = serde_encrypted_value::Key::from_file(key)
        .unwrap();

    let mut config = vec![];
    File::open("conf/config.json")
        .unwrap()
        .read_to_end(&mut config)
        .unwrap();

    let mut deserializer = serde_json::Deserializer::from_slice(&config);
    let deserializer = serde_encrypted_value::Deserializer::new(
        &mut deserializer, key.as_ref());
    let config = Config::deserialize(deserializer).unwrap();

    assert_eq!(config.secret_value, "L/TqOWz7E4z0SoeiTYBrqbqu");
    assert_eq!(config.non_secret_value, "hello, world!");
}

许可证

此存储库在Apache 2.0许可证下提供。

依赖关系

~2–3MB
~62K SLoC