我正在使用BCrypt实现密码哈希,这应该非常直接使用。 但是,使用
根据哈希密码检查密码时BCryptHelper.CheckPassword(Password, hashedDBPassword)
这总是返回false。
这是我的哈希课程:
public static class BCryptHasher
{
public static string EncryptPassword(string password)
{
var passwordToHash = password;
var hashedPassword = BCryptHelper.HashPassword(passwordToHash, BCryptHelper.GenerateSalt(6));
return hashedPassword;
}
public static bool CheckPasswordMatch(string userPassword, string hashedDBPassword)
{
return BCryptHelper.CheckPassword(userPassword, hashedDBPassword);
}
}
我已调试以检查密码和hashedPassword是否正确。 这个问题的其他案例并不多,所以我必须做错事。
我在这里找到了同样的问题:ASP.NET MVC 3 app, BCrypt.CheckPassword failing但是还没有找到解决方案。
也许还有其他更好的哈希解决方案?
感谢
答案 0 :(得分:2)
也许问题不在于散列itselft,也许是你将密码存储在数据库中并在之后的字或类似内容中检索它的方式。
我要采取的第一步是编写一个单元测试来检查该类的功能
[TestClass]
public class BCryptHasherTest
{
[TestMethod]
public void check_hashing_works_for_valid_password()
{
string password = "myDummyPassword!";
string hashedPassword = BCryptHasher.EncryptPassword(password);
var passwordsMatch = BCryptHasher.CheckPasswordMatch(password, hashedPassword);
Assert.IsTrue(passwordsMatch);
}
}
如果这个过去了,问题就在你的代码中的其他地方,所以你可以继续测试其他东西,直到找到问题为止。