方案是:HASH + Salt
HASH + Salt 的操作也稱為兩次 HASH,其原理是:第一次 HASH 操作進行身份的初次鑒權,網站會返回一個隨機數(Salt,鹽值),客戶端通過服務器返回的隨機數以及協商好的規則進行第二次 HASH 操作,將操作結果發送給服務器,服務器也通過相同的方法進行操作,如果兩次結果相同,那么就鑒權成功。
此種方式下,服務器也不存儲明文密碼,存儲的是密碼第一次 HASH 后的結果。即使該值被泄露,也不會泄露明文密碼。
發起兩次請求
1、明文傳輸用戶名 例如:caoke
不存在-》登錄失敗
存在-》返回用戶名的hash值。例如:1eea229fd1ea8ac0
2、對"用戶名的hash值+密碼"進行md5,產生hash,明文傳輸用戶名、密碼hash值。例如:md5("1eea229fd1ea8ac"+"123456") =838cfa0690f2198b
后端對用戶名、密碼hash進行比對
存在-》登錄成功
不存在-》密碼錯誤
傳輸過程中只會泄露:caoke、838cfa0690f2198b、838cfa0690f2198b,而不會泄露密碼123456
注冊過程也是這個方案
另一種方案
博客園用的是rsa的方式對用戶名、密碼加密傳輸,這也是一種方式 ,具體可以看看encryptjs庫,前端傳入公鑰,加密,然后傳輸給服務器,服務器用私鑰解密。