在應用程式中,常常有要將使用者的密碼加密儲存的需要。 以明文保存密碼有個缺點:一旦洩漏時容易造成極大的損失,可能會連帶其他網站的用戶、密碼也造成損失(因為大多數用戶在多數網站使用相同的帳號與密碼)。
這個洩漏可能來自於兩方面:駭客入侵與維運人員監守自盜。
為了防止密碼明文洩漏,我們需要對在資料庫中保存的密碼欄位進行不可逆加密。準確地說,是加密以後再保存到資料庫中。
常用的不可逆加密演算法有MD5與SHA-1。
在NodeJS中,它們的使用極為簡便,直接使用官方內建的crypto
套件即可:
##
var clearText = '123456'; // MD5 Hash require('crypto').createHash('md5').update(clearText).digest('hex'); // 'e10adc3949ba59abbe56e057f20f883e' // SHA-1 Hash require('crypto').createHash('sha1').update(clearText).digest('hex'); // '7c4a8d09ca3762af61e59520943dc26494f8941b'
當使用者註冊時,將使用者提交的密碼先不可逆加密,然後將密文保存在資料庫內。
當使用者登入時,將使用者提交的密碼先以相同方式加密,然後與資料庫中的密文比對,來判斷密碼的正誤。
理論上有無數個密碼對應同一個Hash值,不過不用過於擔心被撞表的風險,因為相較之下,你的Web伺服器與資料庫可能會在泛洪攻擊中先行崩潰。 相關推薦:javascript - 有些網站在使用者提交登入時將密碼框中的密碼用js進行了一次不可逆加密,然後提交。這樣做有必要么?有什麼好處和壞處?
#jquery.cookie.js實作使用者登入儲存密碼功能的方法_ jquery
以上是NodeJS實作不可逆加密與密碼保存的詳細內容。更多資訊請關注PHP中文網其他相關文章!