2013-07-31 40 views
0

我对加密和密码等方面还很陌生,我在这里有一些可疑的代码,这似乎是失败的。我创建一个新用户并将他们的密码插入到mysql中。插入的密码是PHP crypt()总是失败?

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; 
} 
} 

编辑: 我已经做了一些记录,这里就是我得到:

输出继电器从隐窝($密码)是: $ 6 $ 1ySEgqi5 $ X9t7CZ4FXjjUReCu2VQF0klBY5kWQkb8LlIIk9oQ4RD4.W.1/IWMZW7/XaqDXIv8owWSpmLmvI .kAFGSbxELZ1

存储在MySQL的哈希值是:

$ $ 6/RYC6Gax $ uNhUzQPDmJy29DgUB06Ilv4Oh69D5h7NfnBSW1

他们显然不一样。这是怎么回事!?

+0

你有没有试过确保$ row-> password包含你认为它的作用?尝试回显输入,数据库和输出值,并手动比较它们 – Anigel

+0

好吧,所以我已经做了一些日志编辑上面^^^ – Amoeba

+0

在这里你应该找到解决你的问题[点击](http:// stackoverflow。问题/ 5258860/php-crypt-returning-wrong-answer) 编辑:阅读第一条评论(链接) – dabe

回答

0

我已经找到了答案,但我花了一段时间才意识到它。因此,为了解决遇到这个问题的其他人的利益......检查数据库中存储散列的列的大小!

该代码最初是在Windows系统上编写的,但是当我在Linux系统(Ubuntu)上运行它时,crypt()函数然后使用需要更长列长度的SHA-512算法。我在MySQL和宾果游戏中将列更改为CHAR(128),它工作了!