PHP crypt()-返回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位的数值。您使用的形式只是该数字的十六进制表示

crypt()函数的docs()显示了MD5哈希的以下示例:

$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”不限于十六进制表示形式。