Python itsdangerous模块实现Token加密与解密详解

一只小鹿
一只小鹿
发布时间:2026-10-11 | 1人浏览过
原创

本文介绍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安全模块的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表