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

 

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