PHP crypt()-返回md5哈希
crypt()函数的docs()显示了MD5哈希的以下示例:PHP crypt()-返回md5哈希,php,md5,crypt,Php,Md5,Crypt,crypt()函数的docs()显示了MD5哈希的以下示例: $1$rasmusle$rISCgZzpwk3UhDidwXvin0 我理解,“$1$”是前缀,它包含信息,该散列是MD5散列 但是字符串的其余部分如何成为MD5散列呢?通常它应该是一个32字符的字符串(0-9,a-f),对吗 我肯定,这是个愚蠢的问题,但我还是想问 通常它应该是一个32字符的字符串(0-9,a-f),对吗 这是不正确的(至少严格地说)。从技术上讲,MD5哈希是一个128位的数值。您使用的形式只是该数字的十六进制表示
$1$rasmusle$rISCgZzpwk3UhDidwXvin0
我理解,“$1$”是前缀,它包含信息,该散列是MD5散列
但是字符串的其余部分如何成为MD5散列呢?通常它应该是一个32字符的字符串(0-9,a-f),对吗
我肯定,这是个愚蠢的问题,但我还是想问
通常它应该是一个32字符的字符串(0-9,a-f),对吗
这是不正确的(至少严格地说)。从技术上讲,MD5哈希是一个128位的数值。您使用的形式只是该数字的十六进制表示形式。之所以选择它,是因为它们易于作为字符串交换(128位整数很难处理。毕竟,一个典型的整数变量通常只包含64位)。考虑下面的例子:
md5(“test”)
以十六进制表示:098F6BC4621D373CADE4E832627B4F6
md5(“test”)
在base 64表示法中:CY9rzUYh03PK3k6DJie09g==
md5(“test”)
十进制(以10为基数)表示法:12707736894140473154801792860916528374
md5(“test”)
在base 27表示法中(从未使用过,只是因为我能证明我的观点):ko21h9o9h8bc1hgmao4e69bn6f
所有这些字符串都表示相同的数值,只是基数不同。您期望的是一个十六进制编码的字符串,得到的是一个base64编码的字符串。它们都表示哈希函数的二进制输出。另外:
$ID$SALT$HASH
您应该使用的是MD5,当然不是MD5。@Sammitch虽然password\u HASH()
肯定比crypt()
好,但它在PHP5.5之前是不可用的。例如,我仍然使用PHP5.3或5.4更新多个站点,并且我肯定想在那里使用password\u hash()
。@Pietu1998-5.3.7版本的PHP有一个upwards@Pietu1998见上面马克的链接。还值得注意的是,password\u compat是由编写password\u hash()
的同一个人编写的,它甚至从文档页面链接到。另外还有一个用于概述“md5”不限于十六进制表示形式。