本地/生产地穴返回不同的哈希

时间:2013-02-24 09:16:32

标签: php

PHP crypt函数在本地和生产服务器上返回不同的哈希值。 在localhost上,crypt哈希验证工作正常,但在生产时它没有。

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

代码:

echo crypt('123123123');

本地示例响应:

$1$7ymnm8q/$M6HLj2JEvzWGElqlwjAKm0

生产示例响应:

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

2 个答案:

答案 0 :(得分:1)

引用PHP docu on crypt()

  

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

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

您可以使用以下常量来查看您正在运行的系统crypt()支持的内容:

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

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

此外,您没有指定特定的salt,因此PHP将为您生成一个,每次调用crypt()时也会有所不同。

答案 1 :(得分:0)

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

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

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

请参阅crypt() documentation

  

salt 一个可选的salt字符串,用于基于散列。如果未提供,则行为由算法实现定义   会导致意想不到的结果。