8个稳定版本
1.5.2 | 2024年1月23日 |
---|---|
1.5.1 | 2023年12月29日 |
1.5.0 | 2023年10月26日 |
1.4.0 | 2023年9月29日 |
1.1.0 | 2023年5月29日 |
#876 in 加密学
102 每月下载次数
在 4 个crate(2个直接)中使用
1.5MB
6K SLoC
Rust argon2-kdf
一个使用Argon2进行密码散列和派生加密密钥的库。Argon2是一个内存-hard 密钥派生函数,赢得了密码散列竞赛。它可以生成非常强大的散列。
此crate是argon2 crate的替代品。argon2 crate是一个纯Rust实现,而此crate使用原始C Argon2库。原始C实现通常比argon2 crate的实现速度快(尽管您真的应该在您的机器上测试它——性能基准很少具有普遍适用性)。
此crate旨在简单易用。只需看看示例!
用法
要使用argon2-kdf,请将以下内容添加到您的Cargo.toml
[dependencies]
argon2-kdf = "1.5.2"
要向用于构建Argon2库的C编译器传递构建标志,您可以在环境变量ARGON2_KDF_C_COMPILER_FLAGS
中添加分号分隔的标志列表。例如,如果您希望禁用默认启用的AVX优化,可以使用以下命令:ARGON2_KDF_C_COMPILER_FLAGS="-mno-avx512f;-mno-avx2" cargo build
。
示例
散列密码,然后验证散列
use argon2_kdf::Hasher;
let password = b"password";
let hash = Hasher::default().hash(password).unwrap();
assert!(hash.verify(password));
更改用于散列的参数
use argon2_kdf::{Algorithm, Hasher};
let password = b"password";
let hash = Hasher::new()
.algorithm(Algorithm::Argon2id)
.salt_length(24)
.hash_length(42)
.iterations(12)
.memory_cost_kib(125000)
.threads(2)
.hash(password)
.unwrap();
assert!(hash.verify(password));
assert_eq!(hash.as_bytes().len(), 42);
assert_eq!(hash.salt_bytes().len(), 24);
验证散列字符串中的散列
use argon2_kdf::{Hash, Hasher};
use std::str::FromStr;
let password = b"password";
let hash_string = "$argon2id$v=19$m=128,t=2,p=1$VnZ3ZFNhZkc$djHLRc+4K/DqQL0f8DMAQQ";
let hash = Hash::from_str(hash_string).unwrap();
assert!(hash.verify(password));
生成散列字符串
use argon2_kdf::{Hash, Hasher};
use std::str::FromStr;
let password = b"password";
let hash = Hasher::default().hash(password).unwrap();
let hash_string = hash.to_string();
assert!(Hash::from_str(&hash_string).unwrap().verify(password));
使用散列和验证的密钥(有时称为“胡椒”)
use argon2_kdf::{Hasher, Secret};
let password = b"password";
let secret = b"secret";
let hash = Hasher::default()
.secret(secret.into())
.hash(password)
.unwrap();
assert!(hash.verify_with_secret(password, secret.into()));
使用您自己的盐(默认情况下,散列器将使用安全的随机盐)
use argon2_kdf::Hasher;
let password = b"password";
let salt = b"dontusethissalt";
let hash = Hasher::default()
.custom_salt(salt)
.hash(password)
.unwrap();
assert!(hash.verify(password));