2009-11-27 73 views
0

我使用加密將客戶密碼存儲在數據庫中。更新和md5密碼

當客戶編輯自己的個人數據(包括密碼)密碼顯示爲*****

我怎麼能明白使用改變了他的密碼,這樣寫不DB連連加密。

我的意思是密碼字段中的值是加密值。如果不更改密碼必須使用相同的值更新(或完全不更新) 如果用戶更改密碼爲1234,我必須加密1234和寫入到DB加密值

感謝

+2

MD5不是加密.alg。這是一個哈希算法。 – erenon 2009-11-27 12:50:32

+0

你能改說你的問題嗎?我不明白你的意思在最後兩段... – 2009-11-27 12:53:59

回答

6

不要發送md5散列了來自DB的字符串。設置了三個領域:

  • 舊密碼
  • 新密碼
  • 新密碼再次

然後檢查MD5哈希後的第一個字段等於在DB所存儲的一個。如果是,則散列第二個字段並存儲它。 (僅在第二和第三個相等時)

+0

謝謝,我要去ipmlement – ntan 2009-11-27 13:24:28

+0

工程就好了 – ntan 2009-11-27 13:51:27

0

當用戶想要更改時,您應該要求輸入舊密碼和新密碼。

這樣,您可以對舊密碼進行編碼,檢查編碼值是否與數據庫中的值相同。如果它是相同的,那麼你應該使用編碼的新密碼更新db中的密碼。如果不相同(或舊密碼爲空),則不更新。

這有助於您區分密碼更改和僅設置更改。您還可以獲得某種程度的安全性,就好像某人已經捕獲了您的用戶會話一樣,如果沒有捕獲原始密碼,他也無法更改其密碼。

0

的幾點:

  • MD5是一種散列算法,你將永遠無法逆轉的哈希,這就是點。
  • 不要使用MD5,因爲它已被破解,請使用SHA2 +散列算法(例如SHA256)
  • 只需使用舊密碼對數據庫中的舊密碼進行散列來確認密碼。
  • 另一個選項是重置密碼,該密碼將通過電子郵件將他們確認的(希望)聯繫電子郵件與新密碼一起發送。
  • 如果他們已經登錄到系統中,則不需要再次「確認」舊密碼。
  • 永遠不要從數據庫中發回散列密碼,這有點破壞你想要完成的目的。