0

PHPcrypt函数在本地和生产服务器上返回不同的哈希值。在 localhost 上,crypt hash 验证工作正常,但在生产上却不行。

Local: PHP 5.4.4
Procution: PHP 5.3.10-1ubuntu3.5 

代码:

echo crypt('123123123');

本地示例响应:

$1$7ymnm8q/$M6HLj2JEvzWGElqlwjAKm0

生产示例响应:

$6$sbttg2v6$2YAU3dNKR/.MRGmbBV4sR8vEhr/L8aOMTej1u3gArhgIiCiJ5IFJ
4

2 回答 2

1

引用PHP 文档crypt()

crypt() 将使用基于标准 Unix DES 的算法或系统上可能可用的替代算法返回一个散列字符串。

所以cyrpt() 不受特定算法的约束,而是使用系统支持的内容。

您可以使用以下常量来查看,您正在运行的系统是否支持这些常量crypt()

  • CRYPT_STD_DES
  • CRYPT_EXT_DES
  • CRYPT_MD5
  • CRYPT_BLOWFISH
  • CRYPT_SHA256
  • CRYPT_SHA512

如果您查看文档中的示例,您会看到,您的本地代码使用 MD5 进行加密,而生产服务器使用 SHA-512。

此外,您没有指定特定的盐,因此 PHP 会为您生成一个,在每次调用crypt().

于 2013-02-24T09:22:22.450 回答
0

系统使用不同的默认散列算法:$1$代表 MD5,$6$代表 SHA-512

salt您应该使用参数明确指定算法:

crypt('123123123', '$6$somerandomstring');

请参阅crypt()文档

salt一个可选的盐字符串,作为散列的基础。如果未提供,则行为由算法实现定义,并可能导致意外结果。

于 2013-02-24T09:24:53.350 回答