服務(wù)端數(shù)據(jù)庫有LoginSalt和PasswordSalt兩個字段,前者是變化的,后者是固定的。首先服務(wù)端存放的密碼是MD5(p + PasswordSalt) (p為明文密碼),PasswordSalt是針對每個用戶單獨生成的,用來防彩虹表。1.注冊的時候客戶端生成PasswordSalt 然后把MD5(p + PasswordSalt) (這里用PasswordSalt是為了防止截取注冊密碼用彩虹表反推)和 PasswordSalt傳遞給服務(wù)端,如果注冊成功,服務(wù)端保存這兩者2.登錄的時候首先向服務(wù)端請求LoginSalt(LoginSalt在請求時生成,并存入對應(yīng)的用戶中)和PasswordSalt,然后向服務(wù)端發(fā)送MD5(MD5(p + PasswordSalt) + LoginSalt),然后服務(wù)端進行驗證,如果驗證通過,即登錄成功,將重新生成LoginSalt并存入對應(yīng)用戶(防止重放攻擊),這時候同時向客戶端返回這個LoginSalt,以作為權(quán)限高一級API的Token。這樣是否可行?主要想達到的目的有三個,1是防彩虹表,2是防止重放攻擊,3是給高權(quán)限API一個憑證
3 回答

月關(guān)寶盒
TA貢獻1772條經(jīng)驗 獲得超5個贊
功能問題: 如果這樣設(shè)計, 同一用戶就不能同時在多個設(shè)備登錄
安全問題: 何必要發(fā)明復(fù)雜而且未必密碼學(xué)安全的機制呢, 作為開發(fā)者我更愿意相信https + bcrypt
添加回答
舉報
0/150
提交
取消