我正在與一個寵物項目合作,並且我想要添加用戶註冊支持。經過一番研究,我決定在我的數據庫中保存散列密碼和鹽,而不是原始密碼。不過,我很困惑步驟是什麼,以什麼順序。下面是我的假設:如何在網上散列和加密密碼?
註冊
- 客戶端發送到服務器(HTTPS)
- 服務器抓起密碼的用戶名和密碼,生成一個隨機的鹽
- Base64編碼,鹽
- 使用stringify鹽散列密碼
- Base64編碼密碼
- 保存密碼和鹽,放入數據庫
登錄
- 客戶端發送到服務器的用戶名和密碼(HTTPS)
- 服務器抓取的用戶名和密碼,查詢從數據庫哈希PSW和鹽
- 使用鹽的散列密碼,base64對結果進行編碼
- 將密碼與數據庫中散列的psw進行比較
- 如果匹配,驗證用戶
我實現我的系統作爲我的假設,一切似乎工作。但是我不確定base64編碼部分。密碼和salt從二進制到字符串編碼的目的是什麼?我可以跳過這一步嗎?如果我假設的過程是錯誤的,那麼正確的步驟是什麼?
PS我使用express.js作爲服務器,MySQL作爲數據庫
對散列密碼進行Base64編碼通常是爲了更容易存儲,特別是如果散列函數輸出二進制。如果你有一個好的持久化方法可以處理原始二進制文件,那麼編碼是無關緊要的。 – Joe
@Joe謝謝喬!所以一切都是爲了? –