将散列密码与salt(bcrypt)进行比较始终返回false

时间:2017-04-20 08:15:07

标签: java android hash bcrypt salt

在上学期间,我需要使用bcrypt正确存储密码(在数据库中进行哈希处理)。比较它们时,方法总是返回false。我的代码看起来像这样:

寄存器:

String username = editTextUsername.getText().toString();
String password = editTextPassword.getText().toString();
String hashedPW = BCrypt.hashpw(password, BCrypt.gensalt());
User user = new User(username, hashedPW);
user.save();

登录:

String username = editTextUsername.getText().toString();
String enteredPassword = editTextPassword.getText().toString();

String hashedPW = BCrypt.hashpw(enteredPassword, BCrypt.gensalt());

User u = usercontroller.getUser(username); //gets user object
String password = u.getPassword;

BCrypt.checkpw(password, hashedPW); //always returns false

我希望那里有任何可能帮助我的BCrypt职业选手。 提前谢谢!

1 个答案:

答案 0 :(得分:5)

更改

BCrypt.checkpw(password, hashedPW);

BCrypt.checkpw(enteredPassword, password);

然后它会正确评估。

如果密码附加了salt并且生成了哈希,那么无关紧要。

具有不同盐的相同密码的哈希值,根据生成密码的密码进行评估时,将评估为真。

哈希是一种算法,这意味着我们不能通过哈希重新计算密码。我们只能使用散列算法将密码与密码的哈希进行比较。哈希算法通常用于生成哈希并将其与生成的哈希进行比较。我们使用哈希来安全地存储密码