2014-01-09 41 views
0

我最近一直在用一個登錄名創建用戶管理站點,以編輯/更改站點的各個方面。我試圖做一個更改密碼頁面,所以用戶顯然能夠更改密碼,如果需要的話,我正在搞這個,並已完全搞砸了我的md5和鹽加密到我無法再登錄的點。在我的用戶密碼上丟失了我的md5和鹽加密

在我的密碼行數據庫中,我顯示了長字符的十六進制數(這與我輸入站點登錄的密碼相對應,md5函數改變了這個),我刪除了更長的密碼數據庫(因爲它不再工作)並放回到我的實際密碼中...因此我能夠再次登錄,但是沒有安全密碼...我不知道如何恢復安全性?

我的加密頁面仍然有效,但現在沒有用了......

<?php 

    function encrypt($password){ 
     $salt1="egf"; 
     $salt2="7yh"; 
     $password = md5($salt1 . $password . $salt2); 
     return $password; 
    } 

?> 

請幫幫忙,任何意見,將不勝感激!謝謝

+0

那麼這有什麼問題?將密碼提供給該函數,將返回的哈希值以及其他內容輸入到數據庫中。如果您的登錄功能同時接受明文和散列密碼,那麼您遇到了嚴重的問題。密碼不應**以可檢索的方式存儲。 –

+0

如果你的密碼在數據庫中的明文允許你登錄,比你的encrypt()函數有更多的錯誤(它本身在語法上是很好的) –

+1

靜鹽和鹽一樣好,也是'md5' shouldn不能用於密碼加密,因爲它是散列方法 – kero

回答

2

讓我們看看你的代碼分段:

function encrypt($password){ // You're not encrypting here at all! 
    $salt1="egf"; // Not a salt 
    $salt2="7yh"; // Not a salt 
    $password = md5($salt1 . $password . $salt2); // MD5 is insecure 
    return $password; // Why set to variable then return? 
} 

好像你不理解some fundamental cryptography concepts

  • 加密是一個雙向過程;您不會對密碼進行加密,您可以使用密碼哈希函數對其進行哈希處理(例如scrypt,bcrypt,PBKDF2-SHA256)。
  • MD5是一個糟糕的選擇;這是一個通用的密碼散列函數,不適用於密碼。
  • 鹽必須是每個用戶唯一。有一個靜態的前綴和後綴更類似於辣椒,這是安全專家和許多(我自己包括)觀點辣椒作爲security through obscurity有爭議。

解決方案:使用password_hash()password_verify()。它是由專家爲這個確切的用例設計的。

如果您的PHP版本比5.5.0舊,請升級。如果沒有,請向您的託管服務提供商投訴,然後使用password_compat

不要推出自己的密碼存儲方案。