2014-04-13 44 views
2

我正在使用以下內容來sha1和slat用戶密碼並將它們保存在數據庫中。在使用PHP的登錄表單中使用sha1 salted密碼?

$salt = sha1($password); 
$hashedPass = sha1($salt.$password); 

現在我需要能夠在登錄表單中使用此保存的密碼。

我使用下面的代碼和登錄表單不斷告訴我進入錯誤的信息:

$password = (!empty($_POST['password'])) ? sha1($_POST['password']) : ''; 

可能有人請幫助我?

在此先感謝。

+0

請看看[this](http://php.net/password),而不是手動散列密碼。 – Achrome

+1

您正在將散列密碼與存儲器中的* salted和* hashed密碼進行比較。但是真的,你不應該使用'sha1'作爲hashnig密碼。使用php提供的密碼功能。 – PeeHaa

+0

php.net/password很好,但它需要PHP 5.5+ –

回答

1

它看起來像你存儲在數據庫中的散列密碼爲sha1($鹽。$密碼),但在你的邏輯來檢查密碼,你只是設置爲sha1($密碼)。因此它不會匹配數據庫值。

您需要設置$password = sha1(sha1($_POST['password']).$_POST['password']);

但是,它沒有任何意義存儲鹽密碼爲剛剛SHA1。

+0

這工作。優秀。但爲什麼把sha1存儲爲sha1沒有意義?另外,我不只是將鹽存儲爲sha1。我將'$ password'轉換爲'sha1',然後將'$ password'添加到'$ salt'和'sha1'兩者中。還是我在錯誤的樹上吠叫? – user3454730

+0

我想我應該改寫一下。根據維基百科,鹽是每個密碼隨機生成的字符串*,用作單向函數的附加輸入(例如,sha1)。換句話說,如果兩個用戶具有相同的密碼「test123」,理想情況下應該爲每個用戶隨機生成鹽。如果你使用Sha1生成鹽,你將得到與「test123」相同的結果。相反,生成一些隨機字符。 *免責聲明:*我同意你應該嘗試使用一個庫來處理這些東西,這會在以後挽救頭痛。 –