itsdangerous,一个强大的 Python 库!

更多资料获取

📚 个人网站:ipengtao.com


大家好,今天为大家分享一个强大的 Python 库 - itsdangerous。

Github地址:https://github.com/pallets/itsdangerous


在Web应用开发中,数据的安全传输和存储是非常重要的。Python的itsdangerous库是一个用于签名和序列化数据的工具,确保数据在传输过程中不被篡改。它广泛应用于Flask和Django等Web框架中,用于生成安全令牌、保护敏感信息等。本文将详细介绍itsdangerous库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

安装

要使用itsdangerous库,首先需要安装它。可以通过pip工具方便地进行安装。

以下是安装步骤:

pip install itsdangerous

安装完成后,可以通过导入itsdangerous库来验证是否安装成功:

import itsdangerous
print("itsdangerous库安装成功!")

特性

  1. 数据签名:确保数据在传输过程中未被篡改。
  2. 数据序列化:支持将数据序列化为字符串并进行签名。
  3. 支持多种签名算法:支持HMAC、SHA1、SHA256等多种签名算法。
  4. 时间戳签名:支持带有时间戳的签名,适用于生成有时效性的令牌。
  5. 加密和解密:提供基本的加密和解密功能,保护敏感数据。

基本功能

数据签名

使用itsdangerous库,可以方便地对数据进行签名。

以下是一个简单的示例:

from itsdangerous import Signersigner = Signer('secret-key')
signed_data = signer.sign('hello world')
print("签名后的数据:", signed_data)

数据验证

itsdangerous库支持对签名数据进行验证,以下是一个数据验证的示例:

from itsdangerous import Signer, BadSignaturesigner = Signer('secret-key')
signed_data = signer.sign('hello world')try:original_data = signer.unsign(signed_data)print("原始数据:", original_data)
except BadSignature:print("签名验证失败")

带时间戳的签名

itsdangerous库支持带有时间戳的签名,适用于生成有时效性的令牌。

以下是一个带时间戳签名的示例:

from itsdangerous import TimestampSignersigner = TimestampSigner('secret-key')
signed_data = signer.sign('hello world')
print("带时间戳的签名数据:", signed_data)# 验证签名并获取时间戳
original_data = signer.unsign(signed_data, max_age=60)
print("原始数据:", original_data)

高级功能

序列化和反序列化

itsdangerous库支持将数据序列化为字符串并进行签名。

以下是一个数据序列化和反序列化的示例:

from itsdangerous import URLSafeSerializerserializer = URLSafeSerializer('secret-key')
data = {'id': 1, 'name': 'Alice'}
signed_data = serializer.dumps(data)
print("序列化并签名后的数据:", signed_data)# 反序列化并验证签名
original_data = serializer.loads(signed_data)
print("原始数据:", original_data)

加密和解密

itsdangerous库提供基本的加密和解密功能,保护敏感数据。

以下是一个加密和解密的示例:

from itsdangerous import URLSafeTimedSerializerserializer = URLSafeTimedSerializer('secret-key')
data = {'id': 1, 'name': 'Alice'}
encrypted_data = serializer.dumps(data)
print("加密后的数据:", encrypted_data)# 解密并验证签名
original_data = serializer.loads(encrypted_data, max_age=3600)
print("原始数据:", original_data)

自定义签名算法

itsdangerous库支持自定义签名算法,以下是一个使用SHA256算法的示例:

from itsdangerous import Signer
import hashlibclass SHA256Signer(Signer):def get_signature(self, value):return hashlib.sha256(value + self.secret_key).hexdigest()signer = SHA256Signer('secret-key')
signed_data = signer.sign('hello world')
print("使用SHA256签名的数据:", signed_data)# 验证签名
original_data = signer.unsign(signed_data)
print("原始数据:", original_data)

实际应用场景

Web应用的令牌生成

在Web应用中,itsdangerous库可以用于生成和验证用户令牌,确保用户数据的安全性。假设在开发一个Web应用,需要生成和验证用户登录令牌,可以使用itsdangerous库实现这一功能。

from itsdangerous import URLSafeTimedSerializerdef generate_token(user_id):serializer = URLSafeTimedSerializer('secret-key')return serializer.dumps({'user_id': user_id})def verify_token(token):serializer = URLSafeTimedSerializer('secret-key')try:data = serializer.loads(token, max_age=3600)  # 令牌有效期为1小时return data['user_id']except Exception:return None# 生成令牌
token = generate_token(123)
print("生成的令牌:", token)# 验证令牌
user_id = verify_token(token)
print("验证的用户ID:", user_id)

API请求签名

在API开发中,itsdangerous库可以用于对请求数据进行签名和验证,确保请求的完整性和合法性。假设在开发一个API,需要对请求数据进行签名和验证,可以使用itsdangerous库实现这一功能。

from itsdangerous import Signer, BadSignaturedef sign_request(data, secret_key):signer = Signer(secret_key)return signer.sign(data)def verify_request(signed_data, secret_key):signer = Signer(secret_key)try:original_data = signer.unsign(signed_data)return original_dataexcept BadSignature:return None# 签名请求
data = "api_request_data"
secret_key = "secret-key"
signed_data = sign_request(data, secret_key)
print("签名后的请求数据:", signed_data)# 验证请求
original_data = verify_request(signed_data, secret_key)
print("原始请求数据:", original_data)

邮件验证链接

在用户注册过程中,itsdangerous库可以用于生成和验证邮件验证链接,确保用户邮箱的有效性。假设在开发一个用户注册系统,需要生成和验证邮件验证链接,可以使用itsdangerous库实现这一功能。

from itsdangerous import URLSafeTimedSerializerdef generate_verification_link(email):serializer = URLSafeTimedSerializer('secret-key')token = serializer.dumps({'email': email})return f"http://example.com/verify?token={token}"def verify_email_token(token):serializer = URLSafeTimedSerializer('secret-key')try:data = serializer.loads(token, max_age=3600)  # 链接有效期为1小时return data['email']except Exception:return None# 生成验证链接
email = "user@example.com"
verification_link = generate_verification_link(email)
print("生成的验证链接:", verification_link)# 验证邮件令牌
token = verification_link.split("token=")[1]
verified_email = verify_email_token(token)
print("验证的邮箱地址:", verified_email)

总结

itsdangerous库是一个功能强大且易于使用的数据签名和序列化工具,能够帮助开发者高效地保护数据的安全性。通过支持数据签名、序列化、带时间戳的签名、加密和解密、自定义签名算法等功能,itsdangerous库能够满足各种安全需求。本文详细介绍了itsdangerous库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握itsdangerous库的使用,并在实际项目中发挥其优势。无论是在Web应用的令牌生成、API请求签名还是邮件验证链接的生成中,itsdangerous库都将是一个得力的工具。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器部署—虚拟机安装nginx并部署web网页

该篇博客用于讲解Linux的Centos7发行版中如何通过Linux安装Nginx,然后将静态页面部署到Nginx中,通过浏览器访问。 非常适用于新手小白学习项目部署相关的知识。建议收藏!!! 需要大家提前准备好虚拟机和CentOS7操作系统…

python API自动化(基于Flask搭建MockServer)

接口Mock的理念与实战场景: 什么是Mock: 在接口中,"mock"通常是指创建一个模拟对象来代替实际的依赖项,以便进行单元测试。当一个类或方法依赖于其他类或组件时,为了测试这个类或方法的功能,我们可以使用模拟对象来替代…

M4V文件损坏无法播放?一招轻松修复损坏视频文件!

M4V是一个标准视频文件格式,此种格式常在iPod 、 iPhone 和 PlayStation Portable等设备上使用,同时此格式基于MPEG-4编码第二版,是MP4格式的一种特殊类型,有时可能会因为各种原因而损坏,导致无法正常播放。M4V文件出现…

前端vue3 根据某些Id 筛选数据

现在有一些不等的数据 我需要通过前端 吧这个数据筛选一下 比如我使用一些 我需要的ID 下的数据 比如以上的数据 的 cinemaLineId 来筛选 const cinemaLineId ref(["1246429254713147392", "1182608813770321920", "1182608917403185152"])…

爬取必应关键字搜索结果url

上代码 import aiohttp import asyncio from lxml import etree import aiofiles import time import random aiohttp 和 asyncio 用于异步HTTP请求和事件循环。 lxml 用于解析HTML。 aiofiles 用于异步文件操作。 time 和 random 用于控制爬取速度。 headers {User-Agent: M…

frida的安装使用以及解决抓包app时遇到的证书校验

frida的安装和使用 这里使用夜神模拟器来演示frida的使用,因为真机开启frida-server服务时需要root权限,模拟器自带root 下载夜神模拟器并启动 夜神官网 打开power shell, adb连接模拟器,查看模拟器的系统型号 adb connect 127.0.0.1:6200…

阿里云centos7.9 挂载数据盘 并更改宝塔站点根目录

一、让系统显示中文 参考:centos7 怎么让命令行显示中文(英文->中文)_如何在命令行中显示中文-CSDN博客 1、输入命令:locale -a |grep "zh_CN" 可以看到已经存在了中文包 2、输入命令:sudo vi…

SecureCRT使用SSH登录服务器报错:Key exchange failed

SecureCRT使用SSH登录Ubuntu服务器报错:Key exchange failed 原因: ssh客户端与服务器的公钥协商失败,SecureCRT客户端所指定的秘钥交换算法(KexAlgorithms ),不在服务端支持范围内。可能是服务端的sshd版…

学习笔记(linux高级编程)7

2._exit 系统调用 void _exit(int status); 功能: 让进程退出,不刷新缓存区 参数: status:进程退出状态 返回值: 缺省 回调函数 3.atexit int atexit(void (*function)(void)); 功能: 注册进程退出前执行的函数 参数: function:函数指针 指向void返回值void参数的函数指针 返…

C++ | Leetcode C++题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxProfit(int k, vector<int>& prices) {if (prices.empty()) {return 0;}int n prices.size();k min(k, n / 2);vector<int> buy(k 1);vector<int> sell(k 1);buy[0] -prices[0]…

配电房挂轨巡检机器人

配电房作为电网中的重要组成部分。其运行的的安全和稳定性直接影响到电力供应的质量。然而&#xff0c;传统的人工巡检模式存在诸多弊端&#xff0c;例如巡检效率低下、人员安全难以保障、巡检结果主观性强等问题。为了解决这些问题&#xff0c;旗晟机器人推出B3系列升降云台轨…

CODESYS+EtherCAT+X86/ARM硬件平台:高性能运动控制的标配,支持定制

支持的硬件标准与定制平台&#xff1a; X86:INTEL ARM: RK3568/RK3588/TI/NXP/树莓派/全志T3/A40i等 前段时间分享了施耐德基于CODEYS开发的首款支持EtherCAT总线的运动控制器&#xff0c;CODESYSEtherCATX86硬件平台&#xff1a;高性能运动控制的标配。 CODESYS第一次接触还…

4大wordpress渐变色网站模板

家居摆件wordpress外贸模板 家居装饰、配件、摆件wordpress外贸模板&#xff0c;适合搞家居装饰的公司官网使用。 https://www.jianzhanpress.com/?p3515 玩具wordpress外贸模板 简洁玩具wordpress外贸模板&#xff0c;适合做跨境电商外贸公司使用的wordpres外贸s网站主题。…

PTE-靶场训练-1

PTE-靶场训练实战笔记 靶场搭建 靶场下载链接&#xff1a; https://pan.baidu.com/s/1ce1Kk0hSYlxrUoRTnNsiKA?pwdha1x vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置好后reboot重启一下即可&#xff0c;然后访问81-85端口&#xff0c;共5题。 因为靶场出了问题&a…

C++ Primer 中文版 第5版 读书笔记

读书过程中发现&#xff0c;读得越多&#xff0c;忘得越多。因此记录读书笔记 1.2 初始输入输出 向流写入数据 <<运算符&#xff08;输出运算符&#xff09;接受两个运算对象&#xff1a;左侧的运算对象必须是一个ostream对象&#xff0c;右侧的运算对象是要打印的值。…

Vatee万腾平台:一站式智慧服务,让生活更美好

在数字化浪潮席卷全球的今天&#xff0c;我们生活的方方面面都在经历着前所未有的变革。Vatee万腾平台凭借其一站式智慧服务&#xff0c;正成为推动这场变革的重要力量&#xff0c;让我们的生活变得更加美好。 Vatee万腾平台&#xff0c;作为一家专注于提供智慧服务的领军企业&…

基于weixin小程序校园快递系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;订单管理&#xff0c;快递管理&#xff0c;快递记录管理&#xff0c;公告管理&#xff0c;基础数据管理 小程序功能包括&#xff1a;系统首页&#xff0c;…

企业有必要安装数据文件加密软件吗?哇!这么多好处

需要的 一、查看以下分析&#xff0c;便能得出结论 安全防护提升&#xff1a;禁止拷贝、打印、截屏等&#xff0c;还能够设置文件的浏览次数、有效期&#xff0c;提供多层次的文档保护措施。 核心机密保护&#xff1a;企业的核心机密文件、技术资料、客户资料等重要信息是公…

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用

react18 中使用@reduxjs/toolkit 1.安装依赖包 yarn add @reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹,然后创建 index.js 文件。 import {configureStore } from "@reduxjs/toolkit"; import {counterReducer } from "./feature…

Does a vector database maintain pre-vector chunked data for RAG systems?

题意&#xff1a;一个向量数据库是否为RAG系统维护预向量化分块数据&#xff1f; 问题背景&#xff1a; I believe that when using an LLM with a Retrieval-Augmented Generation (RAG) approach, the results retrieved from a vector search must ultimately be presented…