PHP密码函数密码编码


PHP crypt function password encoding

以下代码返回相同的加密密码。我们为什么以及如何阻止这种情况。

$pwd = 'shits8888';
$salt = '50153fc193af9';
echo crypt($pwd,$salt)

很明显,有些东西丢失了,因为这是返回相同的东西

$pwd = 'shits8888hjhfgnsdkjf8744884';
$salt = '50153fc193af9';
echo crypt($pwd,$salt)

标准的基于DES的crypt()将salt作为输出的前两个字符返回。它也只使用str的前八个字符,因此以相同八个字符开头的较长字符串将生成相同的结果(当使用相同的salt时)。

http://php.net/manual/en/function.crypt.php

如果你想对用于哈希的算法进行更多的控制,我建议你看看mcrypt。

还要注意,crypt()(尽管有名称)实际上并没有加密字符串,它只是生成一个散列。如果你指定了盐,你可能也在某个地方储存,你可能会用这样的东西做得更好:

function my_crypt ($string, $salt) {
  return sha1($string.$salt); // ...or your hashing function of choice
}

参考手册:标准的基于DES的crypt()将salt作为输出的前两个字符返回。它也只使用str的前八个字符,因此以相同八个字符开头的较长字符串将生成相同的结果(当使用相同的salt时)。

两个条目都有相同的前8个字符和相同的salt。所以它必须返回相同的结果。

例如:

echo crypt('12345678xxxxx','50153fc193af9');
echo crypt('12345678yyyyyy','50153fc193af9');

都将返回50gyRGMzn6mi6因为它们共享相同的盐和相同的前8个字符

每种加密算法都有一个限制,甚至md5在某个时刻也会被重复。