BCrypt.checkpw不起作用(Java)

问题描述 投票:2回答:3

我的网络应用使用BCrypt加密用户密码并将其保存到MySQL(列数据类型:varchar(255)]

BCrypt.hashpw(password, BCrypt.gensalt(15));

但是,当用户登录时,BCrypt.checkpw无法匹配与注册时使用的密码(哈希之前)相同的密码。

boolean passwordMatch = BCrypt.checkpw(password, user.getPassword()); //false

我不知道发生了什么。有谁知道我应该去哪里检查?

java mysql hash passwords bcrypt
3个回答
0
投票

我刚刚发现它与BCrypt似乎没有任何关系,因为我尝试重新编译我的Web应用程序,并且登录有效,但是,我不明白为什么它需要重新编译。


0
投票
BCrypt.hashpw(password, BCrypt.gensalt(15));//this is when you insert
//********
boolean passwordMatch = BCrypt.checkpw( plainPassword , myPasswordOnDB); 

((plainPassword是字符串密码,myPasswordOnDB是加密密码)

这是检查密码的正确方法。如果这对您不起作用,请尝试使mySQL列密码为char(60)。


0
投票

这里有同样的问题。

几年前,我编写了一个应用程序,并升级了一些jar,但没有升级bcrypt。这是在游戏框架中我用BCrypt.checkpw(password.trim(),user.getPassword())其中password是捕获的纯文本,而user.getPassword是在MySQL中使用char(60)存储的哈希值我哈希密码BCrypt.hashpw(password.trim(),BCrypt.gensalt(15))

与原始版本有趣地工作,但是任何新版本都失败了>>

一个有趣的发现是我在开发数据库中有一个密码,我知道它是“密码”其哈希看起来像这样

$ 2a $ 10 $ UvKgjjT。/ SuMlD6gsoyD0e2lBcOwFtL / mfGmneTou / lrU1R / ZwMLK

vs

我刚刚做了一个新密码,并将密码设置为'password'

其哈希看起来像这样

$ 2a $ 10 $ rNJzD52 / muHMkBF1Co9XF.VkQNRHQ3HCW.DYzke7jnY424voZwyq6

我知道它们应该有所不同,但格式看起来有所不同?

请提供任何帮助,因为这没有任何意义,因为没有任何变化,但是新用户无法注册

© www.soinside.com 2019 - 2024. All rights reserved.