使用md5甚至更加困难

时间:2012-07-09 18:15:41

标签: php hash passwords

  

可能重复:
  Secure hash and salt for PHP passwords

我看到有人像这样编码密码哈希,

md5(uniqid(mt_rand('password', 15), true));

是一种安全的方式吗?那是不是很有效?

3 个答案:

答案 0 :(得分:11)

不,这不是一种安全的方式。它是可以破解的,在你的例子中,它是不可重复的。您必须使用散列本身存储随机值long。如果数据库被泄露,那么强制执行哈希变得非常简单。

你应该知道MD5和SHA1是PHP中最弱的两种散列算法。

使用crypt()功能,CRYPT_BLOWFISHPBKDF2会更好。

<强>更新

另外,正如PeeHaa所说,它不起作用。 mt_rand('password', 15)将导致Warning: mt_rand() expects parameter 1 to be long, string given on line X

答案 1 :(得分:6)

这不仅不安全,甚至不起作用。

mt_rand需要2个参数,最小值和最大值。

mt_rand('password', 15)

这会将'password'转换为int(0),然后在015之间返回一个随机数。

uniqid(mt_rand('password', 15), true)

然后生成一个唯一的ID,并将上一步中的随机数加到它上面:计算如下内容:

144ffb22886d58e1.82100749

那个字符串然后是md5'd。

正如您可能看到的,此代码是100%无用的。原始密码将转换为0并永久丢失,因此您所做的只是散列随机数,这是毫无意义的。既然你有哈希,就无法再次验证它。由于密码已转换,无论用户输入什么都无关紧要。

所以,不,这段代码不安全,不要使用它。

就个人而言,我使用phpass library。它安全且易于使用。

答案 2 :(得分:2)

老实说,我甚至不会使用md5作为存储密码的哈希算法。我会考虑使用像bcrypt这样的东西。此外,我甚至不知道你的例子是如何工作的,但无论如何如果你想要保护它,那么至少要远离md5,sha1并从别人那里学习错误并使用盐。