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