2013-05-02 58 views
-1

我會盡力在最好的解釋..如何加密的純文本格式的MD5哈希密碼

在我的項目開始我只是儲存在純文本格式的密碼,現在才上傳到服務器,我想與MD5哈希他們,當用戶登錄,他使用簡單的密碼作爲前..

只是他們應該在數據庫被散列..

是我應該做的,在不改變很多編碼和登錄腳本?

如何添加記住密碼功能並忘記密碼功能簡單的登錄頁面?任何可以將我的問題分類的鏈接。

我正在使用php和sql。

+0

一次提出一個問題。 – Rikesh 2013-05-02 06:25:53

+0

不要這樣做!如果您將密碼的MD5ed版本作爲用戶必須發送的密碼,那麼攻擊者必須知道MD5密碼才能進入一個帳戶,而該帳戶使用MD5毫無意義!用戶必須將真實密碼發送到服務器,然後在與數據庫中的密碼進行比較之前,使用與服務器上存儲的密碼*相同的算法對其進行哈希處理。 – Quentin 2013-05-02 06:27:52

+0

MD5 [不管怎樣都不適合存儲密碼](http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash) – Quentin 2013-05-02 06:28:15

回答

2

至於你的MD5的問題:

UPDATE users SET password = MD5(password)

在您的登錄腳本,請在驗證用戶的憑據,您只需通過添加MD5函數,以及:

SELECT id FROM users WHERE login = :login AND password = MD5(:password)

有關密碼丟失功能的第二個問題在SO上有extensive coverage

+0

這是處理散列密碼的傳統方式,但**它不安全**,您應該使用更好的散列算法。 – Quentin 2013-05-02 06:30:17

+0

你的第一個查詢更新以前存儲在MD5散列的純文本密碼? – BK004 2013-05-02 06:30:41

+0

@Bhushan,是的。 – Sherlock 2013-05-02 06:31:40

-1

PHP有一個MD5函數(如你可能知道):

$password = mysql_result(mysql_query(SELECT `password` from `users`), 1); 
$password = md5($password); 
mysql_query(UPDATE `users` set `password` = '$password'); 

(很明顯,你需要調整上面的代碼與數據庫結構工作)

如果你的數據庫使用phpMyAdmin還有一個內置的MD5功能,您可以在理論上使用它來一次更新所有表格。

0

你的第一個問題 運行此查詢

UPDATE urusertable SET password=md5(password); 

,併爲您的第二個問題 當用戶檢查烏爾讓我登錄複選框 檢查它,然後設置一個cookie您所需的時間,,

if(isset($_POST['remember'])){ 
setCookie('rememberhim','whateverurvalue',time()+3600*7); 
} 

然後每次用戶訪問您的網站時檢查cookie。 如果您只是想自動填充登錄域,還要將用戶名和密碼存儲在cookie中,但這對於自動填充是一個非常糟糕的做法。