2017-06-17 73 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