我遇到使用crypt的问题。我正在为客户重建一个网站。因此,以前的版本中有很多继承的代码。我必须保持站点原始数据库,所以我必须小心我改变代码的方式。之前的开发人员使用crypt()函数创建用于存储的用户密码哈希。我看到的奇怪效果是,相同密码的轻微变化有时会创建完全相同的哈希。我不太了解地穴如何运作,但在我看来,这不应该发生。以下是一些代码示例。
echo crypt('Colliedog6','wfd')."\n";
echo crypt('Colliedog10','wfd')."\n";
这会在我的服务器上返回相同的哈希字符串。我正在使用那个salt字符串,因为这是以前的开发人员使用的,所有当前的密码都是使用该salt字符串制作的,所以我真的需要使用它,除非我们想强制所有用户重置密码。这不一定是不可能的,但我们想避免它。为什么crypt会像上面那样使用两个略有不同的字符串并创建相同的哈希值?
答案 0 :(得分:5)
来自the docs:
标准的基于DES的crypt()返回salt作为输出的前两个字符。它也只使用str的前八个字符,因此以相同的八个字符开头的较长字符串将产生相同的结果(当使用相同的salt时)。
答案 1 :(得分:1)
因为crypt()
忽略了8日之后的字符。像往常一样,阅读PHP手册/文档是一个很好的起点 - 在PHP中有很多类似的问题:http://php.net/manual/en/function.crypt.php