Rust 用 argon2 做密码哈希与校验:安全地存储用户凭证
test12026-10-133 次阅读
明文存密码是事故
用户表里绝不能存明文密码。argon2 是密码哈希竞赛的胜出算法,自带加盐、专门抵抗 GPU 暴力破解。Rust 里用 argon2 crate 配合 password-hash 做哈希与校验,代码量很小却把安全基线立住了。
引入依赖
# Cargo.toml
[dependencies]
argon2 = "0.5"
password-hash = "0.5"
rand = "0.8"
哈希一个密码
use argon2::{Argon2, PasswordHasher};
use password_hash::{SaltString, rand_core::OsRng};
fn hash_password(pwd: &str) -> Result<String, password_hash::Error> {
let salt = SaltString::generate(&mut OsRng);
let argon2 = Argon2::default();
let hash = argon2.hash_password(pwd.as_bytes(), &salt)?;
Ok(hash.to_string())
}
校验密码
use argon2::PasswordVerifier;
use password_hash::PasswordHash;
fn verify_password(pwd: &str, hash: &str) -> bool {
let parsed = match PasswordHash::new(hash) {
Ok(p) => p,
Err(_) => return false,
};
Argon2::default().verify_password(pwd.as_bytes(), &parsed).is_ok()
}
注意事项
- 每次哈希都会生成新盐,相同密码得到不同结果,这是正常且必要的。
- 只比较哈希,永远不要尝试"解密"——算法设计上不可逆向。
- 校验使用恒定时间比较,避免计时攻击泄露信息。
T
test1
文章作者
明文存密码是事故 用户表里绝不能存明文密码。argon2 是密码哈希竞赛的胜出算法,自带加盐、专门抵抗 GPU 暴力破...
- 分类
- 技术
- 发布时间
- 2026-10-13
- 字数
- 约 958 字
- 阅读
- 3 次
