2010-09-21 85 views
0

我試圖爲我的用戶密碼創建一個雙向加密算法。 我需要它加密,但沒有預先設置的加密通(我設置了什麼)(鹽?)原始密碼不能解密PHP雙向加密加密

+1

使用相同密鑰時,加密數據始終可以解密。這就是[加密的定義](http://en.wikipedia.org/wiki/Encryption)。我想你的意思是[密碼哈希](http://en.wikipedia.org/wiki/Cryptographic_hash_function)。 – Gumbo 2010-09-21 09:45:39

回答

2

這聽起來像你想要使用單向密碼散列而不是雙向散列,雙向加密。下面是最佳實踐密碼存儲和驗證的一個很好的例子:

要保存它:

$ userPasswordInput = $ _ POST [「密碼」];

$鹽= //理想的是,生成一個隨機並將其保存到該數據庫,否則,使用保存到PHP文件

$密碼= SHA1恆定($ $ userPasswordInput鹽);

保存$密碼(最好$鹽)到數據庫。比較時,連接salt和用戶輸入,將其加密(或無論哪種加密),然後將其與保存的(加密的+鹽漬的)密碼進行比較。

+0

我這樣做會用於加密,但。我無法解密它,並使用$ salt獲取密碼? – Daniel 2010-09-21 09:33:39

2

對於雙向加密,這稱爲「密鑰」,而不是「鹽」。檢出mcrypt函數。

+1

我將在運行PHP的多個服務器/站點上使用它。大多數沒有安裝該擴展。很難更新每個服務器/站點。 – Daniel 2010-09-21 09:38:12

+0

我需要的東西,內置到php – Daniel 2010-09-21 10:10:33

+0

我只是尋找一些函數,我可以用它來編碼和解碼一個哈希,我想一個哈希只有解碼如果使用了正確的密鑰(編碼時輸入的那個) – Daniel 2010-09-21 11:25:49

0

我這樣做的:

創建一個$用戶+ $密碼

$saltedHash = md5($salt.$password); 

現在你有一個加密的密碼($ saltedHash)將其保存到數據庫。

如果有人嘗試登錄,則對輸入的密碼進行相同操作,並將其與db中的密碼進行比較。

0

最簡單的方法(儘管在存儲方面非常浪費)是生成一個隨機字符串並將其異或爲密碼。 (正如有人已經指出的那樣,這被稱爲密鑰,而不是鹽。)這稱爲one-time pad。顧名思義,您不能重複使用相同的密鑰來輸入多個密碼。