2017-06-17 68 views
0

我试图建立一个登录功能,但没有一个登记制度比较哈希登录。这提出了一个问题,因为我不知道如何使mysql和php之间的哈希兼容。PHP数据库DB

PHP代码

if (password_verify($upass, 'sha256') && $count == 1){ 
     $_SESSION['userSession'] = $row['uid']; 
     header("Location:profilepage.php"); 
    } 
    else { 
    //SPLOSIONS!! 
    } 

$upass代表对我的表单输入,用户输入自己的密码,给出一个POST

我在MySQL的散列密码尝试:

UPDATE users SET `userpassword` = SHA2(`userpassword`, 256) 

userpassworduserpassword列匹配我的数据库,我已经和SHA2哈希。

这里的问题是,我的password_verify在PHP代码出现与MySQL的我更新哈希密码不符。因此,我遇到了我的else命令,而不是我想要的代码。

想知道如何让我的MySQL密码栏与我的PHP代码兼容,或者反之亦然,或者如果有这种更实用的方式。

+4

您需要使用'password_verify'的配对伴侣功能'password_hash'散列密码,在PHP方面,你应该使用默认的bcrypt算法。 – ceejayoz

回答

1

解决它!

添加以下代码:

$hashslingingslasher = password_hash($upass, PASSWORD_DEFAULT); 

通过然后把它称为:

if (password_verify($upass, $hashslingingslasher) && $count == 1){ 
     $_SESSION['userSession'] = $row['uid']; 
     header("Location:userpage.php"); 
    } 
+2

请不要告诉我这两个'$ upass'变量是同一个?!即你正在哈希'$ upass'变量,然后立即验证它...... ?! – deceze

+0

这就是我有点困惑的地方。我的主要目标是验证哈希密码,我通过mysql在我的数据库中设置密码。因为我不打算拥有注册系统,所以我的登录凭证是在mysql中进行的,并在其中进行哈希处理。为了确保兼容性,我已经采取哈希用户的输入,并验证它对我的哈希密码。我想这里的批评可能是哈希输入失败了哈希的目的? –

+1

您必须使用创建它的相同哈希机制来验证您存储在数据库中的哈希。如果你创建散列为SHA256,那么你不能使用'password_verify'来验证它们,因为它们使用了两种完全不同的算法。您只能在'password_verify'中使用'password_hash'创建的散列。您只能使用SHA256来验证SHA256散列。如果你写了一些以某种方式跨越这两者的东西,它本身*不能*工作,因此必须是无稽之谈。 – deceze