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
答案 0 :(得分:1)
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');
salt 一个可选的salt字符串,用于基于散列。如果未提供,则行为由算法实现定义 会导致意想不到的结果。