为安全起见,在java中密码的哈希值是多少?

时间:2012-05-29 07:56:52

标签: java passwords hash

我正在 Java 开发一个Web应用程序,我希望确保身份验证过程安全 使用哈希密码。

哈希
第1步:我们接受用户提供的密码并添加
步骤2:使用MessageDigest对其进行哈希并将哈希值存储在数据库中

在登录过程中对用户进行身份验证时,我们重复上述相同步骤,而不是 存储散列值时,我们将其与数据库中的值进行比较。

现在原谅我的无知但我想说的是黑客是否可以通过任何其他方式访问数据库 意味着,它可以提供安全性,因为黑客无法从散列中获取密码的真实文本 价值很容易。

如何使用相同的步骤对用户进行身份验证进行身份验证时,如何提供针对Bruteforce attack, Rainbow attack, dictionary attack等其他形式攻击的安全保护?

我认为现在密码的哈希值不是很高 给我一些建议..... 如果我错了。

4 个答案:

答案 0 :(得分:4)

蛮力是蛮力。您无法对此做任何事情,除非在N次连续失败的试验后拒绝尝试验证(或施加延迟)。当然,如果黑客拥有哈希密码,他就可以强制密码,但安全哈希函数的目的是让它非常长。

彩虹/字典攻击通过腌制解决。如果用户选择"密码"作为他的密码,彩虹/字典攻击会立即找到密码。但是,由于您使用随机值加密密码,因此哈希值将类似于d7("58gd0}78sq5sQIazuAKpassword,而不会出现在彩虹表/字典中。

答案 1 :(得分:0)

您的担忧是正确的。 哈希密码提供任何安全层,因为现在有许多工具可用(例如hereherehere)来获取基于的纯文本反向散列和散列目录。 我建议使用具有salt属性的JBcrypt,你没有必要存储在数据库中,并且由于你的盐不为任何人所知,即使你也知道,那么取消哈希和获取它是非常困难的。纯文本。

有关BCrypt的更多信息,请参阅Wikipedia

答案 2 :(得分:0)

Salting and Hashing

这是让人无法读取密码的过程,很难找回用户可能在信用卡网站等其他网站上使用的原始密码。

通过登录验证

现在你的用例是黑客使用普通登录表单通过强力登录,这不是salting和哈希密码应该做,因为它是你的应用程序逻辑,以防止多次登录使用错误的凭证

<强>结论

这是您的应用程序可用于防止强力登录,但不是 salting and hashing 密码。

答案 3 :(得分:-1)

您可以通过强制执行强密码规则来保存应用程序免受Bruteforce攻击,彩虹攻击,字典攻击等影响。密码应包含alphe数字加上特殊字符的组合,例如myPassWord $ 10