pbkdf2盐渍哈希密码验证

时间:2014-07-02 17:30:17

标签: java security encryption

我有一个盐渍哈希密码的用户数据库和他们登录的Java应用程序,这样做更好吗

SELECT COUNT(*) FROM `--database--` WHERE `username`= ? AND `passwordHash`= ?;

如果计数为1,则让他们登录,或者......

SELECT `passwordHash` FROM `--database--` WHERE `username`= ?;

...然后在用户应用程序上本地验证它。

哪个更安全? - 我通常是第一种方式,但我一直看到第二种方式在这里和那里弹出。

供参考,我正在使用的系统:https://codereview.stackexchange.com/questions/55900/password-hashing-method-in-java

1 个答案:

答案 0 :(得分:3)

对我来说,数据库也会有salt,应用程序需要它来计算哈希值。因此你应该使用

SELECT `passwordHash`, `Salt` FROM `--database--` WHERE `username`= ?;

并在应用程序级别执行比较。

随着您构建身份验证机制,例如,此责任分工将派上用场。如果您添加lockout机制:

SELECT `passwordHash`, 
       `Salt`, 
       `LockoutStatus` 
FROM   `--database--` 
WHERE  `username`= ?;

如果您没有使用特定于用户的salt或锁定,则可能存在安全问题。请参阅此主题的oWASP guidance