为什么 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!";
}
?>
所以基本上这就是交易 - 我一直在研究使用 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!";
}
?>