JSP中的MD5哈希密码 - 每次都生成随机哈希

时间:2012-02-11 12:47:01

标签: jsp hash cryptography

为保护密码,该密码的哈希值存储在数据库中。我使用此代码生成字符串的哈希值:http://www.exampledepot.com/egs/javax.crypto/GenMac.html

但我发现它每次都会为同一个字符串生成随机哈希值。所以我无法将其用于密码验证。

如何使代码仅基于String生成哈希值?也就是说,如果我输入“iloveyou”,它应该每次都生成相同的哈希值。不一样。

2 个答案:

答案 0 :(得分:2)

您引用的代码不是简单的MD5,它是HMAC-MD5,其中包含一个密钥。涉及KeyGenerator的第一部分代码每次运行时都会生成一个随机密钥。这个不同的随机密钥每次都会给你一个不同的HMAC结果。

如果您只想要一个简单的MD5哈希,那么您将需要单独使用MD5代码,而不需要HMAC部分。您可能还希望研究使用加密盐来保护密码哈希值,否则具有相同密码的用户将具有相同的哈希值。有关讨论,请参阅Difference between Hashing a Password and Encrypting it

答案 1 :(得分:1)

这里有几件事:

  1. 为了管理密码,您不应该只使用MD5哈希。但问题不在于算法(MD5,其他用户是对的 - 很弱),而是“简单地使用”。你应该做的不仅仅是应用你的哈希函数,无论它是什么。您应该以特定方式应用随机盐,并且应该迭代哈希函数。

  2. 准确地说,“随机盐”将使您的加密基础设施每次执行相同的输入时都会创建一个新的不同结果,这似乎让您感到困惑 - 但不要担心,这没关系!您将完全能够使用它来比较密码。

  3. ......你可能会问......这怎么可能,我该怎么办呢?我建议你阅读我写的这篇文章:http://www.jasypt.org/howtoencryptuserpasswords.html所有内容都有解释。事实上,我还建议您使用jasypt加密密码。它非常简单,可以开箱即用地完成所有这些操作。

    问候。