溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

開發(fā)平臺加解密及鑒權(quán)原理的示例分析

發(fā)布時間:2021-09-10 11:17:14 來源:億速云 閱讀:131 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了開發(fā)平臺加解密及鑒權(quán)原理的示例分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

    一個網(wǎng)站要保證安全,加密、防篡改、身份識別等是起碼的要求。

有幾個問題:

  1. https 為什么公網(wǎng)一定要用https ?

  2. https 什么原理?

  3. https 為什么要用對稱加密+非對稱加密?

  4. https 會讓請求變慢嗎?

  5. 為什么不能只用非對稱加密?

  6. 為什么需要數(shù)字證書?

  7. 有了https ,能做到加密,防篡改,身份識別嗎?

  8. 怎么做鑒權(quán)? …

首先, 為什么要用https,純http,用tcpdump,wirehsark 等軟件抓包,根據(jù)http 協(xié)議規(guī)范,可以很簡單看清每個數(shù)據(jù)包,也可以很輕松的篡改數(shù)據(jù),動態(tài)型網(wǎng)站這是非常危險的。因此對傳輸數(shù)據(jù)加密是非常有必要的,于是有了https。

https 什么原理?

  結(jié)論是對稱加密遠快于非對稱加密,而非對稱加密非常慢。那https 如果采用純非對稱加密,如果包太大,就難以接受了。那https 能不能利用非對稱加密的安全性,用利用對稱加密的速度?這是可以的, https 的原理到底是怎樣呢?參考圖:

開發(fā)平臺加解密及鑒權(quán)原理的示例分析


    1. 服務(wù)端非對稱加密的公鑰A、私鑰A’。


    1. 客戶端發(fā)起請求,服務(wù)端返回公鑰A明文給傳客戶端。


    1. 客戶端隨機生成一個用于對稱加密的密鑰X,用公鑰A加密后傳給服務(wù)端。


    1. 服務(wù)端拿到后用私鑰A’解密得到密鑰X,保存后將sessionId 返回客戶端。


    1. 這樣雙方就都擁有密鑰X了,且別人無法知道它。之后雙方所有數(shù)據(jù)都用密鑰X加密解密。

理解了https 的原理可以知道,并不是每個body 都在用非對稱加密算法加解密,而是用的對稱加密算法在加密解密(部分瀏覽器會存在一個文件中,可以用于抓包),然后對稱加密解密很快,速度比純http 慢一點,但是并不會慢多少。

為什么要有數(shù)字證書?

服務(wù)端給客戶端給公鑰,并不是直接給公鑰,而是給的證書,這是為什么?因為公鑰可能被中間人篡改,所以為了公鑰可信,證書會有公鑰和私鑰對公鑰hash加密后一個數(shù)字簽名,服務(wù)端拿著公鑰對數(shù)字簽名解密,如果和公鑰hash 對的上,就說明公鑰可靠。 開發(fā)平臺加解密及鑒權(quán)原理的示例分析

如何鑒權(quán)?

https 能身份識別嗎?其實只能做到單向識別,想鑒權(quán),其實不夠,我們還需要其他方式。常見的鑒權(quán)方式有哪些?

類md5鑒權(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鑒權(quán)

還有可以利用rsa 進行簽名,用對方公鑰加密,傳給對方,對方用自己的公鑰加密,自己用自己的私鑰對對方傳來數(shù)據(jù)進行解密。這種方式在body 很大的時候有缺點,因為非對稱加解密會很慢,優(yōu)點是相對安全,據(jù)了解,有部分大廠會使用這種方式。

其實,是不是可以借鑒https ,用一種非對稱+對稱加密的方式鑒權(quán)。目前用第一種類md5 方式更多。

上述內(nèi)容就是開發(fā)平臺加解密及鑒權(quán)原理的示例分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI