我需要一些指导,我需要检查来自UI表单(即Authentication
对象)的密码,我需要使用SHA-256 + constant salt
(在进行比较之前)进行哈希处理,密码来自DB(DB也有密码+盐)使用Spring安全.
我想比较使用相同的SALT值生成的这两个不同的散列值.我们如何在java中做到这一点?有人可以分享一下示例代码吗?
你可以简单地比较两个密码字符串passwordA.equals(passwordB)
......
这有一些安全缺点:
密码不应该作为字符串处理,而应该作为字符或字节数组处理:请参阅此处的原因
等效比较(理论上)容易受到时间攻击的影响:请参阅有关java中解决方案的讨论
使用标准工具来执行与安全相关的事情(即使它们看起来很简单)也许是明智之举.Spring安全有很多工具可以帮到你.以BCryptPasswordEncoder为例.为安全起见,使用经过良好测试和维护的框架始终是个好主意.
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String hashedPassword = passwordEncoder.encode(password); ... boolean result = passwordEncoder.matches(rawPassword, hashedPassword);
另外:使用适当的密码哈希算法!有关提案,请参阅此答案
SHA-256不是其中之一.Spring Security为您提供了适合工作的工具,因此您可以使用它们.