发布于 2012-07-09 18:29:46
这不仅不安全,甚至不起作用。
mt_rand采用两个参数,一个最小值和一个最大值。
mt_rand('password', 15)这会将'password'转换为int (0),然后在0和15之间返回一个随机数。
uniqid(mt_rand('password', 15), true)然后生成一个唯一的ID,并将从前一步到前一步的随机数加在前面:计算如下所示:
144ffb22886d58e1.82100749这个字符串就是md5'd。
正如您可能看到的,这段代码是100%无用的。原始密码被转换为0并永远丢失,所以您所做的只是散列随机数,这是没有意义的。既然您有了哈希,就没有办法再次验证它。由于密码是转换的,用户输入的任何内容都不重要。
所以,不,这个代码是不安全的,不要使用它。
就我个人而言,我使用phpass库。它是安全的,而且使用简单。
发布于 2012-07-09 18:20:51
不,这不是安全的方法。它是可破解的,在你的例子中,它是不可重复的。您必须用散列本身来存储长时间随机值。如果th DB被破坏,那么就会非常简单地强行执行散列。
您应该知道,MD5和SHA1是PHP中可用的两种最弱的散列算法。
更好的方法是使用crypt()函数,同时使用CRYPT_BLOWFISH或PBKDF2。
更新
而且,正如PeeHaa所提到的,它不起作用。mt_rand('password', 15)将导致Warning: mt_rand() expects parameter 1 to be long, string given on line X。
发布于 2012-07-09 18:18:42
老实说,我甚至不会使用md5作为存储密码的散列算法。我会研究使用类似于bcrypt的东西。而且,我甚至不知道您的示例将如何工作,但是无论如何,如果您想保护它,那么至少要远离md5、sha1,并从其他错误中学习并使用盐类。
https://stackoverflow.com/questions/11400740
复制相似问题