首页 > 解决方案 > Android Java Bcrypt 库密码与数据库加密密码不匹配

问题描述

所以我知道很多人问为什么他们的加密密码与输入不匹配,但我找不到任何关于我的情况的具体案例。

我在我的 Android Sqlite 项目中使用了https://github.com/patrickfav/bcrypt的 Bcrypt 库。

当我使用他的例子如下:

它记录正常并说密码匹配。但是,当我从另一个使用相同密码的方法调用此验证时,它总是说“假”。有人可以解释一下为什么会发生这种情况,我该如何解决?

String bcryptHashString = BCrypt.withDefaults().hashToString(12, password.toCharArray());
// $2a$12$US00g/uMhoSBm.HiuieBjeMtoN69SN.GE25fCpldebzkryUyopws6
    ...
BCrypt.Result result = BCrypt.verifyer().verify(password.toCharArray(), bcryptHashString);
// result.verified == true

标签: javaandroidsqlitebcrypt

解决方案


您的问题是每次调用以下行都会生成一个新盐:

String bcryptHashString = BCrypt.withDefaults().hashToString(12, password.toCharArray());

您需要将其存储在某处,然后使用它来验证密码。通过使用新盐,它总是无法通过检查。


推荐阅读