Android Java Bcrypt库密码与数据库加密密码不匹配

问题描述

所以我知道很多人问为什么他们的加密密码与输入不匹配,但是我找不到适合自己情况的特定情况。

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

当我使用他的示例时:

它记录得很好,并说密码匹配。但是,当我从另一个使用相同密码的方法调用此验证时,它始终显示为“ false”。有人可以解释一下为什么会发生这种情况以及如何解决吗?

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

解决方法

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

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

您需要将其存储在某个地方,然后使用它来验证密码。使用新的盐将始终使检查失败。