为什么 crypt() 结果不匹配


Why don't crypt() results match?

所以基本上是这样的交易 - 我一直在研究一个使用 php crypt 的用户创建脚本,但我在比较测试中遇到了一些问题。

有什么想法吗?

编辑:

<?php
$pw = 'jason';
$pw2 = 'jason';
$p1 = crypt($pw);
$p2 = crypt($pw2);
if($p1 != $p2){
        echo "oh shoot";
}else{
echo "verified";

}

?>

并且这始终回复"哦,射击",表示两个输出不匹配。

你应该阅读 php 手册加密中string crypt ( string $str [, string $salt ] ) 的函数

如果没有提供盐,PHP 将自动生成一个标准的 字符 (DES) 盐或十二个字符 (MD5),具体取决于 MD5 crypt() 的可用性。

如果未提供,则每次调用此函数时,PHP 都会随机生成一个。因此,当您调用crypt两次时,会返回不同的结果。

Crypt是一个单向字符串哈希函数。

"单向"意味着几乎不可能从加密字符串中派生原始文本。单向哈希函数的设计方式使得很难反转该过程,即查找哈希到给定值的字符串。所以 crypt() 通常为同一个字符串给出不同的输出。

如果要验证密码,可以做的是:

<?php
$hashed_password = crypt('mypassword'); // let the salt be automatically generated
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
echo "Password verified!";
}
?>