Python模塊之itsdangerous

 itsdangerous用來解決什麼問題,爲什麼需要用到itsdangerous?

安裝命令:pip install itsdangerous

有時候你想向不可信的環境發送一些數據,但如何安全完成這個任務呢?解決的方法就是簽名。使用只有你自己知道的密鑰,來加密簽名你的數據,並把加密後的數據發給別人。當你取回數據時,你就可以確保沒人篡改過這份數據。

誠然,接收者可以破譯內容,來看看你的包裹裏有什麼,但他們沒辦法修改你的內容,除非他們也有你的密鑰。所以只要你保管好你的密鑰,並且密鑰足夠複雜,一切就OK了。

itsdangerous內部默認使用了HMAC和SHA1來簽名,基於 Django 簽名模塊。它也支持JSON Web 簽名 (JWS)。這個庫採用BSD協議,由Armin Ronacher編寫,而大部分設計與實現的版權歸Simon Willison和其他的把這個庫變爲現實的Django愛好者們。
 

import itsdangerous

salt='sdaf'#加鹽,指定一個鹽值,別讓別人知道哦,否則就可以解密出來了
t=itsdangerous.TimedJSONWebSignatureSerializer(salt,expires_in=600)#過期時間600秒

# ==============如何加密==================
res=t.dumps({'username':'yangfan','user_id':1})# 在t中加入傳輸的數據
token=res.decode()#指定編碼格式
print(token)
# 得到的數據如下,就是包含數據和鹽值的token了,只有在知道鹽值的時候才能被解密出來
# eyJhbGciOiJIUzUxMiIsImlhdCI6MTU0MTgxOTcyMCwiZXhwIjoxNTQxODIwMzIwfQ.eyJ1c2VybmFtZSI6InlhbmdmYW4iLCJ1c2VyX2lkIjoxfQ.VjCgry9Sr-4iRsK_MHYThcn_O7js9BERrXzocc7BI1aavC3N3s3e0wWMsvq2-Qp-ol_WNMD23wxiYRrA1kwCbg

# ======================加密的數據如何解析=================
res=t.loads('eyJhbGciOiJIUzUxMiIsImlhdCI6MTU0MTgxOTcyMCwiZXhwIjoxNTQxODIwMzIwfQ.eyJ1c2VybmFtZSI6InlhbmdmYW4iLCJ1c2VyX2lkIjoxfQ.VjCgry9Sr-4iRsK_MHYThcn_O7js9BERrXzocc7BI1aavC3N3s3e0wWMsvq2-Qp-ol_WNMD23wxiYRrA1kwCbg')
print(res)
# 返回的數據如下:
# {'username': 'yangfan', 'user_id': 1}
# 我們試一下將解析的數據改一個字母,或者超過了過期時間

加密:

from itsdangerous import TimedJSONWebSignatureSerializer as TJWSS
from django.conf import settings

# tjwss = TJWSS(祕鑰, 有效期(單位秒))
# Django項目中setting中自帶了一個祕鑰直接使用,其他地方 可以先生成一個祕鑰,再使用
tjwss = TJWSS(settings.SECRET_KEY, 300)

# 要加密的數據
data = {
	"id": 123,
}

# 加密 tjwss.dumps(數據), 返回bytes類型
token = tjwss.dumps(data).decode()

解密:

from itsdangerous import TimedJSONWebSignatureSerializer as TJWSS
from django.conf import settings

# 解密 需要跟加密使用一樣的祕鑰以及有效期
tjwss = TJWSS(settings.SECRET_KEY, 300)

try:
	data = tjwss.loads(token)
# 驗證失敗,會拋出itsdangerous.BadData異常
except BadData:
	return None

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章