cookie和token在實(shí)際使用上的區(qū)別是什么?
cookie最初是解決http連接無(wú)狀態(tài)問(wèn)題的產(chǎn)物,用于客戶端和服務(wù)端共同維護(hù)一些狀態(tài)數(shù)據(jù)。cookie會(huì)被附加到http請(qǐng)求中,這不需要開(kāi)發(fā)者做額外的支持。cookie存在一個(gè)最大長(zhǎng)度的問(wèn)題(4KB?)。
token通常作為驗(yàn)證后的憑證,免除在一定時(shí)間內(nèi)的重復(fù)驗(yàn)證。token的存儲(chǔ)和參數(shù)傳遞都需要開(kāi)發(fā)者來(lái)處理。
使用cookie來(lái)維持登錄態(tài),在實(shí)現(xiàn)過(guò)程中實(shí)際上是在cookie中添加一個(gè)token來(lái)維持一個(gè)登錄態(tài)。
cookie和token都是一個(gè)字符串,具體在這個(gè)字符串里面存放什么都可以商量。
客戶端如何對(duì)賬號(hào)密碼進(jìn)行加密?
一般做法是這樣的:
這里只討論登錄名和密碼,不考慮設(shè)備id等其他一些參數(shù)。
客戶端 登錄請(qǐng)求參數(shù):account,md5(password+salt)
服務(wù)端驗(yàn)證后 返回:result,token
那么在傳輸過(guò)程中,別人雖然不知道賬號(hào)密碼,但能看到“ABCDEFG”。
只要下次把“ABCDEFG”傳給服務(wù)器,照樣可以登陸成功。
抵御重放攻擊,可以在請(qǐng)求中加入時(shí)間戳,對(duì)整個(gè)請(qǐng)求體做簽名,服務(wù)器驗(yàn)簽后檢查時(shí)間戳以及account,來(lái)決定是否響應(yīng)。
那么加密的意義只是讓明文不可見(jiàn)?
md5(password+salt)的目的不在于抵御重放攻擊,而是為了保護(hù)用戶真正的密碼不被泄露。
我很少見(jiàn)到使用題主這種方案的。賬號(hào):zhihu
密碼:123456
假設(shè)用RSA非對(duì)稱加密,加密完為“ABCDEFG”
當(dāng)然也不是不可以。這里加密的目的依然是 “為了保護(hù)用戶真正的密碼不被泄露”。
另外補(bǔ)充一下,md5以及其他摘要算法(sha1、sha256等)并不屬于加密算法。
如果希望整個(gè)通信不是明文傳輸,可以使用HTTPS,或者自己實(shí)現(xiàn)一套服務(wù)器認(rèn)證,公鑰交換以及加密解密的規(guī)則。
謝邀。