我对加密和密码等都很陌生,而且我在这里有一些可疑代码似乎失败了。我创建一个新用户并将其密码插入mysql。插入的密码是
的输出crypt( $user_input );
当我检索行并运行以下代码以验证用户以便他们可以登录时,它返回false(是的,用户IS输入正确的密码)。这适用于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
他们显然不一样。发生了什么事?!
答案 0 :(得分:0)
我找到了答案,虽然我花了一段时间才意识到这一点。所以为了遇到这个问题的其他人的利益...检查数据库中存储哈希的列的大小!
代码最初是在Windows系统上编写的,但是当我在Linux系统(Ubuntu)上运行时,crypt()函数则使用需要更长列长度的SHA-512算法。我在MySQL和bingo中将列更改为CHAR(128),它工作了!!!