我之前接觸到的App登陸會將密碼按照固定的格式加鹽做MD5后向服務(wù)器發(fā)送請求逆害,服務(wù)器收到后直接比對數(shù)據(jù)庫中是否有匹配的MD5值來確定是否登陸成功刀森,但這本質(zhì)上和沒加密沒有任何區(qū)別纪他,假定我們的請求為http請求 钳宪,當(dāng)黑客抓包得到這個(gè)md5做reply時(shí)债朵,依然可以驗(yàn)證成功躁染,所以這么做并不安全畸陡。
是否可以加上時(shí)間戳鹰溜?
答案是:如果采用MD5這種不可逆算法,加上時(shí)間戳后MD5值和之前的就完全不一樣丁恭,這樣不行曹动。
那么就只能采用一個(gè)能加密和解密的方式,來讓服務(wù)器獲取到時(shí)間戳牲览,來判斷是否為reply墓陈,這里有兩種方案的猜想,一種是雙鑰(雙鑰體系)體系第献,一種是單鑰體系贡必。
采用雙鑰體系
如果采用雙鑰體系,我們可以采用RSA庸毫,客戶端服務(wù)器都有自己的公鑰私鑰仔拟,客戶端發(fā)送密碼時(shí)可以先將密碼+時(shí)間戳用自己的私鑰加密(認(rèn)證)再用服務(wù)器端的公鑰加密(保證密鑰再傳輸信道上安全)后發(fā)送給服務(wù)器,服務(wù)器先用自己的私鑰解密后再拿用戶的公鑰解密岔绸。解密后得到的明文有密碼和時(shí)間戳理逊,時(shí)間戳在一定范圍內(nèi)被認(rèn)為是合法的。
采用單鑰體系
在開發(fā)時(shí)事先和后臺溝通好密鑰的生成規(guī)則盒揉。之后將密碼加鹽的MD5和時(shí)間戳一起用溝通好的密鑰加密晋被,這里用DES或者AES都可以。服務(wù)器端接收到密碼后用密鑰解密刚盈,得到密碼加鹽的MD5和時(shí)間戳羡洛,時(shí)間戳在一定范圍內(nèi)被認(rèn)為是合法時(shí),拿MD5到數(shù)據(jù)庫做驗(yàn)證。