为什么 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";


}


?>

并且这始终如一地回复 "oh shoot" 表明两个输出不匹配。

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

If no salt is provided, PHP will auto-generate either a standard two character (DES) salt, or a twelve character (MD5), depending on the availability of MD5 crypt().

如果不提供,每次调用此函数时PHP会随机生成一个。所以当你调用 crypt 两次时,返回了不同的结果。

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

"one way"意味着从加密后几乎不可能推导出原文 string.A是,要找到一个散列到给定 value.So 的字符串,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!";
}
?>