使用crypt作为密码哈希并比较值?

时间:2011-04-16 10:43:44

标签: php comparison crypt

我决定使用crypt()在我的数据库中使用salt来加密我的密码,因为经过大量研究后它似乎是最好的选择。

我很好奇为什么这会起作用并获得匹配:

$info['password'] == crypt($_POST['password'])

相同的比较不是这样的:

$info['password'] === crypt($_POST['password'])

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

The documentation解释了您遇到的现象。第二个参数文档说明:

  

用于基于散列的可选盐串。如果未提供,则行为由算法实现定义,并可能导致意外结果。

运行以下内容时,您将有机会获得10个不同的值:

<?php
$string = "password";
for ($i = 0; $i < 10; $i++) {
    echo crypt($string) . "\n";
}

我得到以下内容:

$1$sWCzgR2e$vjR1CagStx0QbRYy/VbWm.
$1$C5TexeGI$ifWZ3mhGKthQ.ZW1UEswl/
$1$miA.EAYy$A6amxA.B4HvebndP/2ydx1
$1$izL6b3lz$hKncuA4oGv.8DAlAcybm..
$1$EqPefzSc$1XvQFf7pqFeuFz68lA1tv0
$1$njFWwWUo$NeQxtRHyUUzivVhidQSt5/
$1$LH3CVBV1$IIPPuHPUNL04ODtuRw0WR0
$1$/K75BwgK$MhSmhXtXF9Gn6ujx3YgE30
$1$OfddZpSQ$4u.dgsAWe4M/bOerUYTxr0
$1$G6JPvJpQ$aGvHluWRSy659MUe9P/aN.

我建议您使用数据库salt作为crypt($password, $salt)电话的第二个参数。

答案 1 :(得分:-1)

运算符“==”检查两个变量是否具有相同的值,并且“===”运算符测试以查看变量是否具有相同的值并键入: http://nz.php.net/manual/en/language.operators.comparison.php

所以 1 ==“1”为真 1 ===“1”不是真的