Php 返回不同散列的本地/生产加密
PHPPhp 返回不同散列的本地/生产加密,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
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
此外,您没有指定特定的salt,因此PHP将为您生成一个salt,这在每次调用
crypt()
时也会有所不同。系统使用不同的默认哈希算法:$1$
代表MD5,$6$
代表SHA-512
应使用salt
参数明确指定算法:
crypt('123123123', '$6$somerandomstring');
见:
salt一个可选的salt字符串,以作为散列的基础。如果未提供,则行为由算法实现和
可能导致意外的结果
当我尝试验证密码时,在服务器上使用:
(crypt($form->password,$user->password)!=$user->password)
时,它总是返回false
。应该是什么问题?@luciannascimentocrypt()
是一个单向函数。所以你不能用那种方式解密。要比较两个密码,您可以使用类似于crypt($db\u pw,$salt)==crypt($entered\u pw,$salt)
。