7 个版本 (破坏性更新)
0.6.0 | 2023 年 12 月 19 日 |
---|---|
0.5.1 | 2023 年 12 月 18 日 |
0.4.0 | 2023 年 12 月 3 日 |
0.3.0 | 2023 年 12 月 2 日 |
0.1.0 | 2023 年 11 月 29 日 |
#1879 in 密码学
每月 84 次下载
用于 secured
72KB
982 行
secured-enclave
概述
secured-enclave
是一个 Rust 包,旨在提供安全和高效的加密解密数据方式。它提供使用各种加密算法、密钥派生策略以及元数据支持的强大加密方式。
功能
- 安全加密解密:使用 ChaCha20Poly1305 进行加密和身份验证,确保强大的安全性。
- 元数据支持:允许将元数据与加密数据关联。
- 灵活的密钥管理:支持不同的密钥派生策略以增强安全性。
- 序列化和反序列化:轻松序列化和反序列化加密数据以进行存储或传输。
安装
将以下行添加到您的 Cargo.toml
文件
[dependencies]
secured-enclave = "0.5.0"
用法
基本加密解密
加密数据
use secured_enclave::{Enclave, Encryptable, KeyDerivationStrategy};
let password = "strong_password";
let encrypted_string = "Hello, world!".encrypt(password.to_string(), KeyDerivationStrategy::default());
解密数据
use secured_enclave::{Decryptable, EnclaveError};
let password = "strong_password";
let decrypted_result = encrypted_data.decrypt(password.to_string());
println!("Decrypted data: {:?}", String::from_utf8(decrypted_data).unwrap())
高级用法
使用自定义策略加密
在需要时还可以进行更多控制
use secured_enclave::{Enclave, KeyDerivationStrategy};
fn main() {
// Key generation (32bytes for the key, 16 bytes for salt)
let key = Key::<32, 16>::new(b"my password", KeyDerivationStrategy::PBKDF2(900_000)); // 900K iterations
// Leave some readable metadata (but signed!)
let metadata = b"some metadata".to_vec();
// Using Enclave for data encapsulation (&str metadata, 8-byte nonce)
let enclave =
Enclave::from_plain_bytes(metadata, key.pubk, b"Some bytes to encrypt".to_vec())
.unwrap();
// Get encrypted bytes (ciphertext)
println!("Encrypted bytes: {:?}", enclave.encrypted_bytes);
// Serialize everything to bytes
let bytes: Vec<u8> = enclave.into();
// Decrypt Enclave
let decrypted_bytes = enclave.decrypt(key.pubk).unwrap();
assert_eq!(decrypted_bytes, b"Some bytes to encrypt");
}
使用元数据解密
use enclave::{Decryptable, EnclaveError};
let decryption_result = encrypted_data_with_metadata.decrypt_with_metadata::<Vec<u8>>(key);
match decryption_result {
Ok((decrypted_data, metadata)) => {
println!("Decrypted data: {:?}", String::from_utf8(decrypted_data).unwrap());
println!("Metadata: {:?}", String::from_utf8(metadata).unwrap());
},
Err(e) => println!("Error during decryption: {:?}", e),
}
测试
该包包含一套全面的单元测试。使用以下命令运行测试
cargo test
贡献
欢迎贡献!请在提交拉取请求之前阅读我们的贡献指南。
许可证
本项目采用 MIT 许可证。
本 README 提供了开始使用 Enclave 包的基本指南。有关更详细的文档,请参阅 API 文档。
依赖关系
~2MB
~40K SLoC