我决定使用 crypt() 使用盐在我的数据库上加密我的密码,因为经过大量研究,这似乎是最好的选择。
我很好奇为什么这会起作用并得到匹配:
$info['password'] == crypt($_POST['password'])
并且像这样进行相同的比较不会:
$info['password'] === crypt($_POST['password'])
有任何想法吗?
谢谢。
我决定使用 crypt() 使用盐在我的数据库上加密我的密码,因为经过大量研究,这似乎是最好的选择。
我很好奇为什么这会起作用并得到匹配:
$info['password'] == crypt($_POST['password'])
并且像这样进行相同的比较不会:
$info['password'] === crypt($_POST['password'])
有任何想法吗?
谢谢。
该文档解释了您遇到的现象。第二个参数文档指出:
一个可选的盐字符串,作为散列的基础。如果未提供,则行为由算法实现定义,并可能导致意外结果。
当您运行以下命令时,您很有可能会获得 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)
调用的第二个参数。
运算符“==”检查两个变量是否具有相同的值,“===”运算符检查变量是否具有相同的值和类型: http: //nz.php.net/manual/ zh/language.operators.comparison.php
所以 1 == "1" 是真的 1 === "1" 不是真的