Php 返回不同散列的本地/生产加密

Php 返回不同散列的本地/生产加密,php,Php,PHPcrypt函数在本地服务器和生产服务器上返回不同的哈希值。 在本地主机上,crypt散列验证工作正常,但在生产环境中则不然 Local: PHP 5.4.4 Procution: PHP 5.3.10-1ubuntu3.5 代码: 本地示例响应: $1$7ymnm8q/$M6HLj2JEvzWGElqlwjAKm0 $6$sbttg2v6$2YAU3dNKR/.MRGmbBV4sR8vEhr/L8aOMTej1u3gArhgIiCiJ5IFJ 生产示例响应: $1$7ymnm8q

PHP
crypt
函数在本地服务器和生产服务器上返回不同的哈希值。 在本地主机上,crypt散列验证工作正常,但在生产环境中则不然

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

代码:

本地示例响应:

$1$7ymnm8q/$M6HLj2JEvzWGElqlwjAKm0
$6$sbttg2v6$2YAU3dNKR/.MRGmbBV4sR8vEhr/L8aOMTej1u3gArhgIiCiJ5IFJ
生产示例响应:

$1$7ymnm8q/$M6HLj2JEvzWGElqlwjAKm0
$6$sbttg2v6$2YAU3dNKR/.MRGmbBV4sR8vEhr/L8aOMTej1u3gArhgIiCiJ5IFJ
引自:

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

因此,
cyrpt()
没有绑定到特定的算法,而是使用系统支持的内容

您可以使用以下常量查看运行的系统中支持的
crypt()

  • CRYPT\u STD\u DES
  • CRYPT\u EXT\u DES
  • CRYPT_MD5
  • CRYPT\u河豚
  • CRYPT\u SHA256
  • CRYPT_SHA512
如果您查看文档中的示例,您将看到本地代码使用MD5进行加密,而生产服务器使用SHA-512


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

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

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

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

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


当我尝试验证密码时,在服务器上使用:
(crypt($form->password,$user->password)!=$user->password)
时,它总是返回
false
。应该是什么问题?@luciannascimento
crypt()
是一个单向函数。所以你不能用那种方式解密。要比较两个密码,您可以使用类似于
crypt($db\u pw,$salt)==crypt($entered\u pw,$salt)