C#中使用BCrypt.Net.BCrypt实现安全密码存储

首次发布:2026-03-26

1、在nuget里面安装BCrypt.Net-Next

2、加密与效验的核心代码

public class PasswordHelper
{
    /// <summary>
    /// 使用 BCrypt 对密码进行哈希(默认成本因子 10,版本 $2a$)
    /// </summary>
    /// <param name="password">原始密码</param>
    /// <returns>BCrypt 哈希字符串</returns>
    public static string HashPassword(string password)
    {
        // 每次调用都会生成随机盐,因此结果不同,但格式均为 $2a$10$...
        return BCrypt.Net.BCrypt.HashPassword(password, workFactor: 10);
    }

    /// <summary>
    /// 验证密码是否与哈希匹配
    /// </summary>
    /// <param name="password">明文密码</param>
    /// <param name="hash">存储的哈希值</param>
    /// <returns>是否匹配</returns>
    public static bool VerifyPassword(string password, string hash)
    {
        return BCrypt.Net.BCrypt.Verify(password, hash);
    }
}

3、使用示例

string hash = PasswordHelper.HashPassword("lqwvje2026");
Console.WriteLine(hash); // $2a$10$...
bool isValid = PasswordHelper.VerifyPassword("lqwvje2026", hash); // True

典型应用场景

用户认证系统(如网站、API、桌面应用)

密码重置/修改时的重新哈希

敏感数据存储(任何需要单向加密的场景)


为什么选择 BCrypt?

内置随机盐:无需手动管理,避免彩虹表攻击

单向不可逆:无法从哈希反推原密码

跨语言兼容:Java、C#、Python 等实现可互相验证

久经考验:自 1999 年设计以来,被广泛用于安全敏感系统


与其他方案对比

MD5/SHA1:太快且无盐,易被 GPU 暴力破解 → 不推荐用于密码

PBKDF2:也用于密码哈希,但 BCrypt 设计上更难用 GPU 加速

Argon2:更新一代的慢哈希,但 BCrypt 依然可靠且兼容性更好


本文来自 www.luofenming.com