2012-03-17 101 views
3

可能重複:
Is it possible to decrypt md5 hashes?PHP/SQL:UN-MD5字符串

我有一個數據庫來存儲用戶名,密碼,電子郵件等,如果用戶忘記了他/她的密碼,我會將它發送到他們的電子郵件帳戶。

問題是我在將密碼存儲到我的數據庫之前先將密碼加密爲md5。如果用戶的密碼是ABC,我將它作爲867dbd57e9ca9f808存儲在我的數據庫中。如果忘記密碼,我不能發送用戶「867dbd57e9ca9f808」。我需要發送「ABC」。但是,這將需要我「un-md5」字符串,我認爲這是不可能的。

+0

'md5'不像您所說的那樣是「加密」,而是「散列」 – 2012-03-17 19:37:27

+0

也使用鹽,不要只是散列它。 – mario 2012-03-17 19:38:09

+0

讓他們在忘記密碼時重置密碼;絕對不要發送純文本密碼。另外,MD5是單向散列;沒有強力字典或類似的攻擊就沒有回頭路了。 – chesles 2012-03-17 19:39:19

回答

10

MD5被設計成哈希,這是一種方式,否則它不會是哈希。你不應該發送用戶的密碼,但可以改變它。您應該生成一個令牌,在GET參數中使用令牌發送鏈接以將密碼更改爲用戶的郵件。如果用戶更改密碼,請刪除令牌。另外,您應該記住該令牌必須有到期時間。

喜歡的東西:

myurl.com/passwordrecovery?token=someGeneratedToken 

在數據庫中,你可以看看令牌,並獲得用戶ID。因此,例如,你的表結構可以是這樣的:

user_id | token | expiry_time 

如果你想保持令牌和數據庫中的過期時間,不這樣做與用戶副令牌,否則用戶可以要求更改密碼,他將得到下面的鏈接(不這樣做):

myurl.com/passwordrecovery?token=token&user_id=number 

這樣,他可以通過更換USER_ID改變別人的密碼。並訪問他的帳戶。到期時間不應超過24小時。

重要

不要使用普通的md5,很容易破解。例如,使用pbkdf2

PHP實現: PHP-Crypt-LibPbkdf2 by inanimatt

2

MD5不是加密,而是散列。這意味着 - 這是不可逆轉的。您無法從哈希中獲取原始字符串。

至於你的情況:像今天大多數網站那樣做。他們不會向您發送密碼,而是向您發送一個鏈接,您可以使用該鏈接重置密碼。這樣您就不必存儲純文本密碼並通過電子郵件發送。

1

散列字符串的全部要點是使其很難得到實際的密碼改回。

順便說一句,爲了提高數據庫的安全性,您應該「密碼」密碼哈希,因爲只需使用MD5對密碼文本進行哈希處理,就可以使用散列表的人輕鬆地使用彩虹表獲取密碼。

如果用戶忘記密碼,請發送鏈接讓他們創建新密碼。切勿通過電子郵件發送密碼,這是非常不安全的。

2

MD5是不是加密算法

它是一個哈希算法。它產生的不是它的輸入的加密形式;它是一個散列

散列是一種單向轉換。在數學中,有一個我們稱之爲「鴿子洞原則」的概念。如果你有十隻鳥和九隻小熊將它們放在一起,那麼一定有一隻小鳥,裏面有一隻以上的小鳥。同樣,如果你的密碼長度爲50,並且你所有的哈希長度都是20,那麼必須有多個密碼相同的哈希值 - 鴿子的數量要比空洞多得多!

由於有許多(無限多,其實)的密碼相同的哈希,甚至是暴力猜測的方法不能從哈希值恢復原始密碼(儘管它可能能夠找到一些密碼它有一定的散列,但不知道它是用戶給出的那個)。原始信息已經丟失

但是,您永遠不需要向用戶發送他們的密碼。 請勿通過電子郵件發送密碼。唯一的例外是用戶需要重置密碼;在這種情況下,爲他們生成一個新的臨時密碼/令牌,並給他們。然後強制他們在登錄時立即設置新密碼。理想情況下,您可以使用安全通信工具(例如通過SSL連接到您的站點),而不是不安全的電子郵件。

你不應該關心用戶的密碼是什麼,只是他們知道密碼。

1

下面是一個例子什麼MD5確實:

假設你想「MD5」字「棒」

假設現在MD5取字符串的每一個字母,值分配給每一個和總結你得到的所有數字。

b爲分配給2(字母表中的第二個字母......)
被分配到1
r被分配到18

總和21

你不能得到的因爲用我的虛擬md5函數,「arb」,「rab」,「ggg」也給出了21.

這就是爲什麼md5是單向函數的原因。

+1

只有使用MD5才能找到一個散列到相同摘要的字符串並不容易:) – 2012-03-17 22:51:45

+0

@SergioTulentsev同意。我只是想解釋它是如何工作的。我覺得很多人在使用這些功能時都不知道幕後發生了什麼。 – 2012-03-17 23:58:26

+0

是的,我有同樣的感覺。這很傷心。 – 2012-03-17 23:59:22