2010-10-22 43 views
4

我目前使用MD5加密在數據庫中存儲密碼。我們之前沒有密碼重置功能。但現在我們正在實施它。所以我無法解密MD5並將密碼發送給用戶。但是我可以做,如果它是在base64加密。現在我有點困惑,這是最好的加密方法。
我已經做了強密碼的客戶端驗證(如8字符長度,特殊字符等)。哪個是最好的加密方法base 64或MD5?

+1

請閱讀此前的問題+答案:http://stackoverflow.com/questions/2780198/phphow-to-send-the-original-password-to-the-user-when-he-clicks-forgot-password – Amber 2010-10-22 04:49:42

+1

不要在客戶端進行驗證,除非您確認該驗證被破壞。如果某人在某個時候寫了一個備用客戶端,那麼你不希望他們在你的安全性中挖洞。你也可以在客戶端進行檢查,但這只是爲了避免往返。 – 2010-10-22 04:52:48

+0

Md5哈希不像以前那樣安全,至少使用sha1,而sha256(從我所知道的)是足夠安全的。 – Joakim 2010-10-22 04:53:04

回答

16

Base 64不是一種加密機制,它是一種編碼方案。它很容易顛倒過來,所以它不是保護關鍵數據的好選擇。

密碼的常用方法是用MD5對它們進行哈希處理,然後存儲哈希。當用戶再次登錄時,對輸入密碼進行散列,並將其與存儲的散列進行比較。

如果用戶忘記了他的密碼,那麼您應該無法告訴他它是什麼。相反,讓他把它重置爲其他東西(大概他能記得的東西)。

此外,正如@Phil Brown提到的,MD5 is not considered a strong encryption mechanism。 SHA-1將更適合完成這項任務。

Base 64編碼通常用於通過僅允許ASCII文本的機制傳輸二進制數據。

+4

忘記密碼的常見方法是重置密碼,向用戶發送新密碼並強制他們在登錄時更改密碼。另外,在這個忘記的密碼時間,SHA1是一個比MD5 – Phil 2010-10-22 04:46:56

+0

更強的哈希算法,我是否可以再次獲得密碼? – svk 2010-10-22 04:46:59

+1

@vinothkumar:你不知道。你隨機爲他們生成一個全新的密碼 - 不是他們選擇的。另外,一旦他們重設密碼,我會考慮鎖定帳戶,如果他們在一段時間後沒有更改密碼,因爲電子郵件是以明文形式發送的。 – 2010-10-22 04:57:00

6

Base64不是加密,它是一種容易可逆的編碼機制。 MD5是單向加密哈希,儘管它使用is not recommended because it is cryptographically weak

爲了您的需要,您可能需要存儲密碼的散列(更適合salt),可能使用SHA-256或更高版本。當用戶忘記密碼時,您會爲它們生成一個隨機的一次性密碼,並強制它們重新創建密碼,或者在驗證某些憑證後讓它們執行密碼。

3

Base64和MD5是沒有加密方法。 Base64只是一種編碼字符的方式,它絕對不提供安全性 - 它與以純文本形式存儲密碼一樣好。 MD5是一個散列函數,這意味着它是單向的並且不能被解密。

哈希值肯定是要走的路。 MD5沒問題,但你應該切換到更安全的功能,如SHA-256。

至於「忘記密碼」功能,從不存儲用戶的密碼並將其發回給他們。相反,爲他們生成(隨機)臨時密碼,以便他們可以登錄並更改密碼。

1

最佳做法是使用MD5存儲密碼哈希,就像您現在(或甚至更好的SHA256)一樣。

不要做密碼恢復。相反,當用戶忘記密碼時,請創建一個新的隨機密碼並將其發送給他們。然後他們可以登錄並將密碼設置爲他們喜歡的東西。更安全。

相關問題