Python itsdangerous模块实现Token加密与解密详解
本文介绍Python中itsdangerous模块的具体使用方法。该模块用于将数据发送到不受信任环境,通过签名确保数据未被篡改。文章详细讲解了安装步骤、TimedJSONWebSignatureSerializer类的配置(如加盐、过期时间),并提供了生成Token、解密Token以及处理超时错误的完整代码示例。
模块概述与安装
itsdangerous是一个Python库,主要用于将数据发送到不受信任的环境。其核心机制是通过签名确保数据在传输过程中未被篡改。要使用该功能,接收方必须拥有发送方的密钥才能对数据进行加密签名;反之,接收者虽然可以破译内容,但无法修改数据,因为修改需要拥有发送者的密钥。只要妥善保管且密钥足够复杂,即可保证安全性。
该模块内部默认使用HMAC和SHA1签名,基于Django签名模块实现,并支持JSON Web签名(JWS)。库采用BSD协议,由Armin Ronacher编写,大部分设计与实现版权归Simon Willison所有。
首先,需要通过pip安装该模块:
pip install itsdangerous核心类:TimedJSONWebSignatureSerializer
在代码实现中,主要使用 TimedJSONWebSignatureSerializer 类。初始化该类时需要传入两个关键参数:
- salt(加盐):用于增加加密的复杂性,防止彩虹表攻击。
- expires_in(过期时间):指定Token的有效时长,单位为秒。
Token生成与解密示例
以下代码展示了如何配置序列化器、生成加密Token以及进行解密验证。
1. 基础加密与解密
首先导入模块,配置加盐字符串和过期时间(例如600秒)。然后定义需要加密的信息字典,调用 dumps() 方法生成Token,并解码为字符串输出。解密时,使用 loads() 方法传入Token即可还原原始数据。
import itsdangerous
salt='sdaf' # 加盐
t=itsdangerous.TimedJSONWebSignatureSerializer(salt,expires_in=600) # 过期时间600秒
info = {'username':'baihe','user_id':1}
# 加密Token
res=t.dumps(info)
token=res.decode() # 指定编码格式
print(token)
# 输出示例: eyJleHAiOjE1NzUwMDczNjgsImlhdCI6MTU3NTAwNjc2OCwiYWxnIjoiSFM1MTIifQ.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InlhbmdmYW4ifQ.yUb3PW53V89ZX4Ci2qeaBJIiizt0JUAN_W9BBzg8QkIR1-uO7NQl6jizSUReOFGanWzfG19t7XFHCWv1JGMIZw
# 解密Token
res = t.loads('eyJhbGciOiJIUzUxMiIsImV4cCI6MTU3NTAwNzM0MywiaWF0IjoxNTc1MDA2NzQzfQ.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InlhbmdmYW4ifQ.k-Q1VyN2TOlQ4flHHoiOYEMRaUEiN5Ms2JgeRdnCZWbQB-WwQ1FScoBWxFGkCYEPoWVpAjQxDBQeBesmulZupQ')
# res = t.loads(token)
print(res)
# 输出: {'username': 'baihe', 'user_id': 1}
# 注意:当Token超时或值有误时,loads()会抛出异常2. 另一种配置方式
也可以从 itsdangerous 直接导入 TimedJSONWebSignatureSerializer 并重命名为 Serializer,配置不同的盐值和过期时间(例如3600秒):
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
salt='abcdefg' # 配置加密的规则
serializer=Serializer(salt,expires_in=3600) # 过期时间一小时
info = {'confirm':1}
# 加密阶段
res=serializer.dumps(info) # 得到加密后的数据,返回字节类型
token=res.decode() # 解码为str
print(token)
# 输出示例: eyJhbGciOiJIUzUxMiIsImV4cCI6MTU2MjY0Nzg4NCwiZXhwIjoxNTYyNjUxNDg0fQ.eyJjb25maXJtIjo1fQ.93DtXu9vHQDW0lr7saJhDBt-dcBxNNh_IMTR-JhWnrT-ujQ9SwevSUyW0p2txLS-gtyRHPlH1eD9INksIWilkA
# 解密阶段
res=serializer.loads(token)
print(res)
# 输出: {'confirm':1}注意事项
在使用 loads() 进行解密时,如果Token已过期或签名验证失败(例如数据被篡改),程序会抛出异常。因此,在实际应用中建议添加 try-except 块来处理可能的错误情况。
以上就是Python itsdangerous模块实现Token加密与解密的详细内容,更多关于Python安全模块的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













