JSP中用于密码的MD5哈希-每次生成随机哈希
为了保护密码,该密码的哈希值存储在数据库中。我使用以下代码生成字符串的哈希值: 但我发现它每次都会为同一个字符串生成随机哈希。因此,我无法使用它进行密码验证JSP中用于密码的MD5哈希-每次生成随机哈希,jsp,hash,cryptography,Jsp,Hash,Cryptography,为了保护密码,该密码的哈希值存储在数据库中。我使用以下代码生成字符串的哈希值: 但我发现它每次都会为同一个字符串生成随机哈希。因此,我无法使用它进行密码验证 如何使代码仅基于字符串生成哈希值?也就是说,如果我输入“iloveyou”,它每次都应该生成相同的哈希值。不是另一个。您引用的代码不是简单的MD5,而是HMAC-MD5,它包含一个键。代码的第一部分涉及KeyGenerator,每次运行它时都会生成一个随机键。不同的随机键每次都会给出不同的HMAC结果 如果您只需要一个简单的MD5哈希,那么
如何使代码仅基于字符串生成哈希值?也就是说,如果我输入“iloveyou”,它每次都应该生成相同的哈希值。不是另一个。您引用的代码不是简单的MD5,而是HMAC-MD5,它包含一个键。代码的第一部分涉及
KeyGenerator
,每次运行它时都会生成一个随机键。不同的随机键每次都会给出不同的HMAC结果
如果您只需要一个简单的MD5哈希,那么您将需要单独使用MD5代码,而不使用HMAC部分。您可能还想研究使用加密盐来保护密码散列,否则具有相同密码的用户将具有相同的散列。有关讨论,请参阅。您引用的代码不是简单的MD5,而是HMAC-MD5,其中包含一个键。代码的第一部分涉及
KeyGenerator
,每次运行它时都会生成一个随机键。不同的随机键每次都会给出不同的HMAC结果
如果您只需要一个简单的MD5哈希,那么您将需要单独使用MD5代码,而不使用HMAC部分。您可能还想研究使用加密盐来保护密码散列,否则具有相同密码的用户将具有相同的散列。有关讨论,请参阅。这里有几点:
注意。一般来说,不要使用MD5(对于任何东西:它被认为是坏的),也不要使用快速散列进行密码散列,而是使用慢速散列。有关详细信息,请参阅。当然,如果你希望每次都是一样的,不要在你的散列中包含(不可复制的)随机数据。谢谢你的链接。我是JSP新手,在JSP中没有内置函数来轻松生成哈希。但是在PHP中,有md5()、shah1()等,所以我正在寻找这些的jsp实现。在jsp中,您可以使用整个Java库,并且可以通过
Java.util.Digest
使用哈希函数。尽管您应该考虑是否可以使用PBKDF-2或bcrypt(具有足够高的工作因子)而不是简单的快速散列函数,原因在前面链接的答案中提到。谢谢。我现在试着用固定的盐。但是我不知道如何把一根绳子当作盐来传递。例如:a1Rj*EE
作为盐。参考:这是否有效:byte[]bSalt=新字节[8]代码>bSalt=base64ToByte(“a1Rj*EE”)代码>?我也可以向该函数传递一个长字符串吗?一般来说,不要使用MD5(对于任何东西:它被认为是坏的),也不要使用快速散列进行密码散列,而是使用慢速散列。有关详细信息,请参阅。当然,如果你希望每次都是一样的,不要在你的散列中包含(不可复制的)随机数据。谢谢你的链接。我是JSP新手,在JSP中没有内置函数来轻松生成哈希。但是在PHP中,有md5()、shah1()等,所以我正在寻找这些的jsp实现。在jsp中,您可以使用整个Java库,并且可以通过Java.util.Digest
使用哈希函数。尽管您应该考虑是否可以使用PBKDF-2或bcrypt(具有足够高的工作因子)而不是简单的快速散列函数,原因在前面链接的答案中提到。谢谢。我现在试着用固定的盐。但是我不知道如何把一根绳子当作盐来传递。例如:a1Rj*EE
作为盐。参考:这是否有效:byte[]bSalt=新字节[8]代码>bSalt=base64ToByte(“a1Rj*EE”)代码>?我也能给那个函数传递一个长字符串吗?谢谢。我知道散列是不可逆的。这就是为什么我用它作为密码。那么KeyGenerator每次都在创建不同的密钥?如何更改代码,以便我只能使用