【问题标题】:Comparing hashed passwords with salt (bcrypt) always returns false将散列密码与 salt (bcrypt) 进行比较总是返回 false
【发布时间】:2017-09-16 18:06:36
【问题描述】:

在为学校做练习时,我需要使用 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 专家可以帮助我。 提前谢谢!

【问题讨论】:

  • 您应该从 UI 传递纯文本密码作为第一个参数和第二个参数从您的商店(散列)..
  • 我不是您要找的 BCrypt 专业人士,但我可以想象 BCrypt.gensalt() 每次调用它时都会返回一个不同的随机数。因此,我认为您的哈希值不同,因为如果 gensalt 不同,结果会不同

标签: java android hash bcrypt salt


【解决方案1】:

改变

BCrypt.checkpw(password, hashedPW);

BCrypt.checkpw(enteredPassword, password);

然后它会正确评估。

密码是否附加盐并生成哈希无关紧要。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2020-05-24
    • 2013-01-25
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多