Java 比较数据库中的密码(编码密码)和用户输入的密码

Java 比较数据库中的密码(编码密码)和用户输入的密码,java,encoding,passwords,bcrypt,Java,Encoding,Passwords,Bcrypt,如何比较用户输入的密码和使用BCryptPasswordEncoder保存在DB中的密码 下面是我们用来在DB中保存密码的代码: BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); String password = encoder.encode("Test")); DB.save(password); 如何检查用户输入的密码和以上保存的密码以允许登录 解释上述过程的任何建议或链接都会有很大帮助?假设每次编码给定字符串时,您

如何比较用户输入的密码和使用BCryptPasswordEncoder保存在DB中的密码

下面是我们用来在DB中保存密码的代码:

BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String password = encoder.encode("Test"));
DB.save(password);
如何检查用户输入的密码和以上保存的密码以允许登录


解释上述过程的任何建议或链接都会有很大帮助?

假设每次编码给定字符串时,您的编码方法都会给出相同的值,那么:

  • 按用户名查找用户
  • 对输入的密码进行编码,存储在内存中
  • 将编码值与数据库中的值进行检查。如果匹配,则他们键入了正确的密码。如果不匹配,那么他们就不匹配

  • 简而言之,您可能不应该使用ApacheShiro或Spring安全性。再长一点:使用用户输入的密码,使用与“编码”相同的散列方式在将密码保存到数据库中之前,请先输入密码,然后比较字符串是否相等。每次对单个密钥/密码进行编码时,都会产生不同的输出字符串…能否在数据库中存储2个密码值?一个是加密值,一个是单向散列。加密值将允许您根据需要进行解密,哈希值将提供一致性以进行比较,但您永远无法恢复原始值。然后你可以使用上面的方法,但是要使用散列版本。那么你做的事情就大错特错了。Bcrypt是一个专门为PhatWrat描述的任务设计的哈希函数。看起来Mick Mememonic找到了一个对这个问题有很好答案的副本。(恐怕我对BCryptPasswordEncoder一无所知)@PhatWrat我指的是OP;)