您好,登錄后才能下訂單哦!
本篇文章為大家展示了開發(fā)平臺加解密及鑒權(quán)原理的示例分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
一個網(wǎng)站要保證安全,加密、防篡改、身份識別等是起碼的要求。
https 為什么公網(wǎng)一定要用https ?
https 什么原理?
https 為什么要用對稱加密+非對稱加密?
https 會讓請求變慢嗎?
為什么不能只用非對稱加密?
為什么需要數(shù)字證書?
有了https ,能做到加密,防篡改,身份識別嗎?
怎么做鑒權(quán)? …
首先, 為什么要用https,純http,用tcpdump,wirehsark 等軟件抓包,根據(jù)http 協(xié)議規(guī)范,可以很簡單看清每個數(shù)據(jù)包,也可以很輕松的篡改數(shù)據(jù),動態(tài)型網(wǎng)站這是非常危險的。因此對傳輸數(shù)據(jù)加密是非常有必要的,于是有了https。
結(jié)論是對稱加密遠快于非對稱加密,而非對稱加密非常慢。那https 如果采用純非對稱加密,如果包太大,就難以接受了。那https 能不能利用非對稱加密的安全性,用利用對稱加密的速度?這是可以的, https 的原理到底是怎樣呢?參考圖:
服務(wù)端非對稱加密的公鑰A、私鑰A’。
客戶端發(fā)起請求,服務(wù)端返回公鑰A明文給傳客戶端。
客戶端隨機生成一個用于對稱加密的密鑰X,用公鑰A加密后傳給服務(wù)端。
服務(wù)端拿到后用私鑰A’解密得到密鑰X,保存后將sessionId 返回客戶端。
這樣雙方就都擁有密鑰X了,且別人無法知道它。之后雙方所有數(shù)據(jù)都用密鑰X加密解密。
理解了https 的原理可以知道,并不是每個body 都在用非對稱加密算法加解密,而是用的對稱加密算法在加密解密(部分瀏覽器會存在一個文件中,可以用于抓包),然后對稱加密解密很快,速度比純http 慢一點,但是并不會慢多少。
服務(wù)端給客戶端給公鑰,并不是直接給公鑰,而是給的證書,這是為什么?因為公鑰可能被中間人篡改,所以為了公鑰可信,證書會有公鑰和私鑰對公鑰hash加密后一個數(shù)字簽名,服務(wù)端拿著公鑰對數(shù)字簽名解密,如果和公鑰hash 對的上,就說明公鑰可靠。
https 能身份識別嗎?其實只能做到單向識別,想鑒權(quán),其實不夠,我們還需要其他方式。常見的鑒權(quán)方式有哪些?
客戶端和服務(wù)端使用同樣的簽名方式,服務(wù)器對請求算的結(jié)果和客戶端傳遞的值進行對比,就可以鑒權(quán)。這里access key 用作識別用戶,secret key 是鹽,也可以理解成密碼。這里很多開放云平臺都是采用類似的加密算法,比如騰訊云采用的TC3-HMAC-SHA256 簽名方法
最簡單的驗簽方式是使用md5做單向加密:md5(msg),但是這種粗暴的加密方式的缺點就是可以暴力破解。然后升級的做法就是加鹽,原理如下:
import hmac message = 'messege' #和url,時間戳等固定參數(shù)有關(guān) key = 'sdfsdfwfahesdfsdfsdfgwgdfgd' # 隨機字符串 h = hmac.new(key, message, digestmod='MD5') sign = h.hexdigest()
客戶端和服務(wù)器約定使用相同的隨機字符串作為salt ,這樣,sign傳遞到server 后,server 使用相同的算法對提取的參數(shù)做相同運算,即可獲得sign, 作為對比即可知道是否鑒權(quán)通過。我們常用的secret key 一般就是salt 。我們能對接口鑒權(quán)了后,有個問題,當不同客戶有不同權(quán)限時,server 怎么識別不同的客戶?這里access key 就起作用了,server 維護個字典,每個access key 對應(yīng)一個 secret key , 就可以區(qū)分開客戶。
server 原理類似:
dict = { access_key1 : secrect_key1, access_key2 : secrect_key2 } #按客戶維度維護的字典,和session的性質(zhì)類似 import hmac access_key = req.header.get(access_key) key = dict[access_key] message = req.body.get(msg) h = hmac.new(key, message, digestmod='MD5') #為增加復(fù)雜度,這里,會對message 混雜時間戳,uri等固定參數(shù) sign = h.hexdigest() if sign == req.header.get('sign'): return true else: return false
還有可以利用rsa 進行簽名,用對方公鑰加密,傳給對方,對方用自己的公鑰加密,自己用自己的私鑰對對方傳來數(shù)據(jù)進行解密。這種方式在body 很大的時候有缺點,因為非對稱加解密會很慢,優(yōu)點是相對安全,據(jù)了解,有部分大廠會使用這種方式。
其實,是不是可以借鑒https ,用一種非對稱+對稱加密的方式鑒權(quán)。目前用第一種類md5 方式更多。
上述內(nèi)容就是開發(fā)平臺加解密及鑒權(quán)原理的示例分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。