Spring Security 提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强哈希结合salt(盐)方法来加密密码。BCrypt是单向Hash加密算法,每次加密的结果都不一样。
一、BCrypt是怎么加密的
密码字符串通过循环加盐,加密后得到Hash,然后拼接BCrypt版本号+Salt盐+Hash得到最终的BCrypt密码存入到数据库中。
二、BCrypt是如何验证加密的
在验证密码时,从数据库存储的密码中取出Salt,用输入的密码和Salt进行Hash,得到的结果和数据库中保存的密码进行比对验证。
三、C#实现BCryptPasswordEncoder加密和验证
1. 安装BCrypt.Net-Next
2. BCrypt加密
//密码明文
string password = "1234";
//加密
string salt = BCrypt.Net.BCrypt.GenerateSalt(10, 'a');
string passwordHash = BCrypt.Net.BCrypt.HashPassword(password, salt);
3. BCrypt验证密码
//数据库存储的密码
string db_password = "$2a$10$I/ANMVIFwOtcM0pHBSvx9Oo1ZZ.mbFjGjK/LL6J8mIKkbgWSyPM0i";
//验证
if (BCrypt.Net.BCrypt.Verify(password, db_password))
Console.WriteLine("验证成功!");
else
Console.WriteLine("验证失败!");