Java 将bcrypt密码与纯文本密码进行比较

Java 将bcrypt密码与纯文本密码进行比较,java,spring,spring-boot,Java,Spring,Spring Boot,我已经在数据库表中使用Bcrypt hashcode存储了密码,但我想在用户登录到我的应用程序后验证该密码 我面临的问题是,当用户登录时,我得到的是纯文本形式的密码,所以我应该如何将其与数据库密码进行比较 我的应用程序是基于spring boot完成的。您应该应用与登录阶段注册阶段相同的“Bcrypt hashcode”算法。然后将其与数据库中存储的值进行比较。 如果equals匹配,您将让请求跟随它的follow,否则将引发异常 没有其他方法,因为: 哈希对密码执行单向转换,将密码转换为另一个

我已经在数据库表中使用Bcrypt hashcode存储了密码,但我想在用户登录到我的应用程序后验证该密码

我面临的问题是,当用户登录时,我得到的是纯文本形式的密码,所以我应该如何将其与数据库密码进行比较

我的应用程序是基于spring boot完成的。

您应该应用与登录阶段注册阶段相同的“Bcrypt hashcode”算法。然后将其与数据库中存储的值进行比较。 如果equals匹配,您将让请求跟随它的follow,否则将引发异常

没有其他方法,因为:

哈希对密码执行单向转换,将密码转换为另一个字符串,称为哈希密码。“单向”意味着实际上不可能走另一条路——将散列密码转换回原始密码。


请检查如何使用您可以尝试这样做:

 PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();     
 if(passwordEncoder.matches(plainTextPassword,encryptedPassword)) {
     // process
 }

嗨,安德烈,谢谢你的建议,但我知道生成的哈希代码是不一样的,我的意思是对于相同的字符串,哈希代码可以不同,所以我想我们不能这样比较。嗨,库马尔,请检查我所做的编辑。我为注册和注册添加了一个链接,它将解决您的问题。顺便说一句,从两个相同字符串生成的hascode必须是相同的ehi Andrei,感谢所有共享资源。我尝试使用相同的字符串,每次都生成不同的哈希代码。我真的不明白如何使用我建议的链接中的新BCryptPasswordEncoder()不起作用。我认为你没有做错什么。嗨,Yosra,我只需要做一些小的改变就行了,我用的不是PasswordEncoder引用,而是BCryptPasswordEncoder引用,BCryptPasswordEncoder passwordEncoder=新的BCryptPasswordEncoder();if(passwordEncoder.matches(明文密码、加密密码)){//process}