python itsdangerous模块的具体使用方法


Posted in Python onFebruary 17, 2020

itsdangerous 简介

有时您只想将一些数据发送到不受信任的环境。但是如何安全地做到这一点?诀窍就是签名。只要知道一个密钥,您就可以对数据进行加密签名并将其移交给其他人。当您取回数据时,可以轻松确保没有人篡改数据。使用itsdangerous可以实现此种方案。

安装

pip install itsdangerous

使用实例一

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}


# 当超时或值有误则会报错

使用实例二

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)
# eyJhbGciOiJIUzUxMiIsImlhdCI6MTU0MTgxOTcyMCwiZXhwIjoxNTQxODIwMzIwfQ.eyJ1c2VybmFtZSI6InlhbmdmYW4iLCJ1c2VyX2lkIjoxfQ.VjCgry9Sr-4iRsK_MHYThcn_O7js9BERrXzocc7BI1aavC3N3s3e0wWMsvq2-Qp-ol_WNMD23wxiYRrA1kwCbg

# =========解密token============

res = t.loads(token)
print(res)
# {'username': 'baihe', 'user_id': 1}


# 当超时或值有误则会报错

使用实例三

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)
# 得到的数据如下,就是包含数据和盐值的token了,只有在知道盐值的时候才能被解密出来
#eyJhbGciOiJIUzUxMiIsImlhdCI6MTU2MjY0Nzg4NCwiZXhwIjoxNTYyNjUxNDg0fQ.eyJjb25maXJtIjo1fQ.93DtXu9vHQDW0lr7saJhDBt-dcBxNNh_IMTR-JhWnrT-ujQ9SwevSUyW0p2txLS-gtyRHPlH1eD9INksIWilkA

# 解密阶段
res=serializer.loads(token)
print(res)
# 返回的数据如下:
# {'confirm':1}

特殊说明

诚然,接收者可以破译内容,来看看你的包裹里有什么,但他们没办法修改你的内容,除非他们也有你的密钥。所以只要你保管好你的密钥,并且密钥足够复杂,一切就OK了。

itsdangerous内部默认使用了HMAC和SHA1来签名,基于 Django 签名模块。它也支持JSON Web 签名 (JWS)。这个库采用BSD协议,由Armin Ronacher编写,而大部分设计与实现的版权归Simon Willison和其他的把这个库变为现实的Django爱好者们。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
python opencv3实现人脸识别(windows)
May 25 Python
python获取中文字符串长度的方法
Nov 14 Python
python中adb有什么功能
Jun 07 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
Python __slots__的使用方法
Nov 15 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 #Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 #Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 #Python
Python cookie的保存与读取、SSL讲解
Feb 17 #Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 #Python
Python交互环境下打印和输入函数的实例内容
Feb 16 #Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 #Python
You might like
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
python 数据加密代码
2008/12/24 Python
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
python按照多个条件排序的方法
2019/02/08 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
高中生学习计划书
2014/09/15 职场文书
三好学生个人总结
2015/02/15 职场文书
离婚被告答辩状
2015/05/22 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS