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

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

本文介绍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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。