RustCrypto:密码哈希
用纯 Rust 编写的密码哈希算法集合,也称为基于密码的密钥派生函数。
支持的算法
算法 | 包 | Crates.io | 文档 | MSRV |
---|---|---|---|---|
Argon2 | argon2 | |||
Balloon | balloon‑hash | |||
bcrypt‑pbkdf | bcrypt‑pbkdf | |||
PBKDF2 | pbkdf2 | |||
scrypt | scrypt | |||
SHA-crypt | sha‑crypt |
请参阅 OWASP 密码存储备忘单 以获取选择适合您用例的适当算法的帮助。
使用方法
以下代码示例展示了如何在使用本仓库中实现的多种可能的密码哈希算法之一存储密码时验证密码。
use password_hash::{PasswordHash, PasswordVerifier};
use argon2::Argon2;
use pbkdf2::Pbkdf2;
use scrypt::Scrypt;
// 可以是:`$argon2`、`$pbkdf2` 或 `$scrypt`
let hash_string = "$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQAAAAAAAAAAA$+r0d29hqEB0yasKr55ZgICsQGSkl0v0kgwhd+U3wyRo";
let input_password = "password";
let password_hash = PasswordHash::new(&hash_string).expect("无效的密码哈希");
// 要支持的算法的特征对象
let algs: &[&dyn PasswordVerifier] = &[&Argon2::default(), &Pbkdf2, &Scrypt];
password_hash.verify_password(algs, input_password).expect("无效的密码");
最低支持的 Rust 版本(MSRV)政策
MSRV 的提升被视为破坏性变更,只会在次要版本升级时进行。
许可证
所有包均采用以下两种许可证之一:
由您选择。
贡献
除非您另有明确说明,否则您有意提交以包含在作品中的任何贡献,按照 Apache-2.0 许可证中的定义,均应按上述方式双重许可,无需任何附加条款或条件。