使用md5甚至更加困难

its*_*sme 6 php passwords hash

可能重复:
PHP密码的安全散列和盐

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

md5(uniqid(mt_rand('password', 15), true));
Run Code Online (Sandbox Code Playgroud)

这是一种安全的方式吗?甚至是成功了吗?

ter*_*ško 11

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

您应该知道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.


Roc*_*mat 6

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

mt_rand 取2个参数,最小值和最大值.

mt_rand('password', 15)
Run Code Online (Sandbox Code Playgroud)

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

uniqid(mt_rand('password', 15), true)
Run Code Online (Sandbox Code Playgroud)

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

144ffb22886d58e1.82100749
Run Code Online (Sandbox Code Playgroud)

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

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

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

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