2011-04-16 90 views
0

我决定使用crypt()来加密我的数据库中的密码,因为经过大量研究后,它似乎是最好的选择。使用crypt作为密码哈希和比较值?

我很好奇,不过,为什么这个工程,并获得匹配的位置:

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

而且同样比较像,这并不:

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

任何想法?

谢谢。

+1

在第一个语句中,您是'='赋值而不是比较'=​​='。这是错字吗? – 2011-04-16 10:45:51

+0

是的。编辑。我的错。 – Basic 2011-04-16 10:47:21

回答

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. 

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

-1

运算符“==”检查是否两个变量具有相同的值和“===”操作测试,看看变量具有相同的值和类型: http://nz.php.net/manual/en/language.operators.comparison.php

所以 1 ==“1”为真 1 ===“1”不正确

+0

-1,这些都是字符串。 – Nick 2011-04-16 10:58:36

+0

不是。 <? echo(1 ==“1”?“yes”:“no”); echo(1 ===“1”?“yes”:“no”); ?> – 2011-04-16 11:00:39

+0

阅读这个问题,他们是**两个字符串**:'<?php $ var =“test”; var_dump($ var ==“test”); var_dump($ var ===“test”);' – Nick 2011-04-16 11:02:17