为什么不将crypt()结果匹配?

时间:2016-02-23 03:39:25

标签: php authentication crypt

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

有什么想法?

编辑:

<?php

$pw = 'jason';
$pw2 = 'jason';

$p1 = crypt($pw);
$p2 = crypt($pw2);

if($p1 != $p2){

        echo "oh shoot";

}else{

echo "verified";


}


?>

这一直在回复&#34;哦拍摄&#34;表示两个输出不匹配。

2 个答案:

答案 0 :(得分:1)

您应该阅读php手册crypt

中的函数string crypt ( string $str [, string $salt ] )
  

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

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

答案 1 :(得分:0)

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!";
}
?>