【发布时间】:2013-07-31 20:55:15
【问题描述】:
我对加密和密码等还很陌生,而且我这里有一些可疑的代码似乎失败了。我创建了一个新用户并将他们的密码插入到 mysql 中。插入的密码是
的输出crypt( $user_input );
当我检索该行并运行以下代码以验证用户以便他们可以登录时,它返回 false(是的,用户正在输入正确的密码)。这适用于 Windows 机器,但不适用于 Ubuntu - 用户是在 Ubuntu 上创建的。有什么我忽略的吗?
while( $row = $result->fetch_object() ) {
error_log("Before crypt");
if( crypt( $password, $row->password) == $row->password ) {
error_log("Crypt works!" );
return true;
} else {
error_log("Crypt fails!");
return false;
}
}
编辑: 我做了一些日志记录,这就是我得到的:
crypt($password) 的输出是: $6$1ySEgqi5$X9t7CZ4FXjjUReCu2VQF0klBY5kWQkb8LlIIk9oQ4RD4.W.1/IWMZW7/XaqDXIv8owWSpmLmvI.kAFGSbxELZ1
存储在 MySQL 中的哈希是:
$6$/RYC6Gax$uNhUzQPDmJy29DgUB06Ilv4Oh69D5h7NfnBSW1
它们显然不一样。怎么回事!?
【问题讨论】:
-
您是否尝试过确保 $row->password 包含您认为的内容?尝试回显输入、数据库和输出值并手动比较它们
-
好的,所以我已经在上面的编辑中做了一些登录 ^^^
-
在这里您应该可以找到解决问题的方法click 编辑:阅读第一条评论(链接)
-
第一条评论表明我已经在做什么?看我的代码
-
确实它确实显示了您已经在做的事情,但我的意思是告诉您
crypt()确定正在使用的算法可能会导致问题。