【发布时间】:2012-02-12 06:07:34
【问题描述】:
为了保护密码,该密码的哈希值存储在数据库中。我正在使用此代码生成字符串的哈希值:http://www.exampledepot.com/egs/javax.crypto/GenMac.html
但我发现它每次都会为同一个字符串生成随机散列。所以我不能用它来验证密码。
如何使该代码仅基于字符串生成哈希值?也就是说,如果我输入“iloveyou”,它应该每次都生成相同的哈希值。不是一个不同的。
【问题讨论】:
-
一般来说,不要使用 MD5(对于任何东西:它被认为是损坏的),并且不要使用快速散列进行密码散列,使用慢速散列。有关详细信息,请参阅What makes a hash function good for password hashing?。当然,如果您希望每次都相同,请不要在哈希中包含(不可重现的)随机数据。
-
感谢您的链接。我是 JSP 新手,在 JSP 中没有内置函数可以轻松生成哈希。但在 PHP 中,有 md5()、shah1() 等。所以我正在寻找这些的 jsp 实现。
-
在 JSP 中,您可以使用整个 Java 库,
java.util.Digest可以使用哈希函数。虽然您应该看看是否可以使用 PBKDF-2 或 bcrypt(具有足够高的工作因子)而不是简单的快速哈希函数,原因在之前链接的答案中提到。 -
谢谢。我现在正在尝试使用固定盐。但我不确定如何将字符串作为盐传递。例如:
a1Rj*EE作为盐。参考:owasp.org/index.php/Hashing_Java 是否可行:byte[] bSalt = new byte[8];bSalt=base64ToByte("a1Rj*EE");?我也可以将长字符串传递给该函数吗?
标签: jsp hash cryptography