2

我在使用 crypt 时遇到问题。我正在为客户重建网站。所以从以前的版本中继承了很多代码。我必须保持网站的原始数据库完好无损,所以我必须小心我在代码方面所做的更改。以前的开发人员使用 crypt() 函数来创建用户密码的哈希值以进行存储。我看到的奇怪效果是,同一个密码的细微变化有时会产生完全相同的哈希值。我不太了解 crypt 的工作原理,但在我看来,这不应该发生。这里有一些代码可以作为示例。

echo crypt('Colliedog6','wfd')."\n";
echo crypt('Colliedog10','wfd')."\n";

这将在我的服务器上返回相同的哈希字符串。我正在使用该盐字符串,因为这是以前的开发人员使用的,并且所有当前密码都是使用该盐字符串制作的,所以我真的需要使用它,除非我们想强制所有用户重置密码。这不一定是不可能的,但我们想避免它。为什么 crypt 会像上面那样采用两个稍微不同的字符串并创建相同的哈希?

4

2 回答 2

5

文档

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

于 2012-03-01T19:46:11.727 回答
1

因为crypt()忽略了 8 号之后的字符。像往常一样,阅读 PHP 手册/文档是一个很好的起点——在 PHP 中有很多类似的问题:http: //php.net/manual/en/function.crypt.php

于 2012-03-01T19:46:58.937 回答