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 次