问题描述
所以我知道很多人问为什么他们的加密密码与输入不匹配,但是我找不到适合自己情况的特定情况。
我正在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());
您需要将其存储在某个地方,然后使用它来验证密码。使用新的盐将始终使检查失败。