#secure #encryption #file-encryption #header #encryption-decryption #header-file #file-header

dexios-core

一个用于加密/解密、密码散列以及管理遵循DEXIOS格式的加密文件头的库

12个版本 (4个稳定版)

1.2.0 2022年8月23日
1.1.1 2022年6月21日
0.0.7 2022年6月9日

#2351 in 加密学


2 crates 中使用

BSD-2-Clause

73KB
1K SLoC

这是什么?

DEXIOS-Core是一个用于管理符合DEXIOS格式的加密功能和头的库。

安全性

DEXIOS-Core使用现代、安全且经过审计的1 AEADs进行加密和解密。

您可以在NCC Group的网站上找到AES-256-GCM和XChaCha20-Poly1305的审计。

1 Deoxys-II-256没有官方审计,所以请自行承担风险使用

谁使用DEXIOS-Core?

这个库由DEXIOS实现,一个安全的命令行文件加密工具。

DEXIOS-Core使您能够轻松地将DEXIOS格式集成到自己的项目中(如果您想看到某个功能,请随时在Github上创建一个issue)。文档中包含大量信息,可以帮助您开始使用!

特性

  • 加密/解密便利函数
  • 3个AEADs(XChaCha20-Poly1305、AES-256-GCM、Deoxys-II-256)
  • 轻松管理加密头(不再担心存储nonce的位置!)
  • 使用安全参数的轻松argon2id散列
  • 使用安全参数和BLAKE3的轻松balloon散列
  • 频繁更新和功能添加!

捐赠

如果您喜欢我的工作,并想支持DEXIOS或DEXIOS-Core,请随意捐赠!这并非强制性的,所以请不要感到有义务这样做。

XMR: 84zSGS18aHtT3CZjZUnnWpCsz1wmA5f65G6BXisbrvAiH7PxZpP8GorbdjAQYRtfeiANZywwUPjZcHu8eXJeWdafJQFK46G
BTC: bc1q8x0r7khrfj40qd0zr5xv3t9nl92rz2387pu48u
ETH: 0x9630f95F11dFa8703b71DbF746E5c83A31A3F2DD

示例

反序列化头

let header_bytes: [u8; 64] = [
  222, 2, 14, 1, 12, 1, 142, 88, 243, 144, 119, 187, 189, 190, 121, 90, 211, 56, 185, 14, 76,
  45, 16, 5, 237, 72, 7, 203, 13, 145, 13, 155, 210, 29, 128, 142, 241, 233, 42, 168, 243,
  129, 0, 0, 0, 0, 0, 0, 214, 45, 3, 4, 11, 212, 129, 123, 192, 157, 185, 109, 151, 225, 233,
  161,
];

let mut cursor = Cursor::new(header_bytes);

// the cursor may be a file, this is just an example

let (header, aad) = Header::deserialize(&mut cursor).unwrap();

将头写入文件

let mut output_file = File::create("test").unwrap();
header.write(&mut output_file).unwrap();

内存中的加密和解密

// obviously the key should contain data, not be an empty vec
let raw_key = Protected::new(vec![0u8; 128]);
let salt = gen_salt();
let key = balloon_hash(raw_key, &salt, &HeaderVersion::V4).unwrap();
let cipher = Ciphers::initialize(key, &Algorithm::XChaCha20Poly1305).unwrap();

let secret = "super secret information";

let nonce = gen_nonce(&Algorithm::XChaCha20Poly1305, &Mode::MemoryMode);
let encrypted_data = cipher.encrypt(&nonce, secret.as_bytes()).unwrap();

let decrypted_data = cipher.decrypt(&nonce, encrypted_data.as_slice()).unwrap();

assert_eq!(secret, decrypted_data);

您可以在项目的主要文档中了解更多关于DEXIOS、DEXIOS-Core和技术细节的信息!

谢谢!

DEXIOS-Core 独家使用由 RustCrypto 团队 提供的 AEAD,因此我想向他们表示衷心的感谢(没有他们这是不可能的!)

依赖项

~4–12MB
~142K SLoC