【发布时间】:2015-05-12 17:46:26
【问题描述】:
crypt() 函数的文档 (http://php.net/manual/de/function.crypt.php) 显示了以下 MD5 哈希示例:
$1$rasmusle$rISCgZzpwk3UhDidwXvin0
我明白,“$1$”是前缀,其中包含哈希是 MD5 哈希的信息。
但是字符串的其余部分如何成为 MD5 哈希?通常它应该是一个 32 字符的字符串(0-9,a-f),对吧?
我敢肯定,这是一个愚蠢的问题,但我还是想问。
【问题讨论】:
-
你期待的是一个十六进制编码的字符串,你得到的是一个 base64 编码的字符串。它们都代表散列函数的二进制输出。另外:
$ID$SALT$HASH你应该使用的是password_hash(),当然不是 MD5。 -
@Sammitch 虽然
password_hash()肯定比crypt()好,但它在PHP 5.5 之前不可用。例如,我仍然使用 PHP 5.3 或 5.4 更新多个站点,我肯定想在那里使用password_hash()。 -
@Pietu1998 - 5.3.7 以上的 PHP 版本有一个 userland implementation of password_*
-
@Pietu1998 请参阅上面的 Mark 链接。还值得注意的是,password_compat 是由编写
password_hash()的同一个人编写的,它甚至可以从文档页面链接到。