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学习笔记之常用函数及说明
May 23 Python
Python中实现常量(Const)功能
Jan 28 Python
python概率计算器实例分析
Mar 25 Python
在Python中操作时间之mktime()方法的使用教程
May 22 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
python列表推导式入门学习解析
Dec 02 Python
Pytorch释放显存占用方式
Jan 13 Python
python实现人机猜拳小游戏
Feb 03 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
python如何利用cv2模块读取显示保存图片
Jun 04 Python
python数字转对应中文的方法总结
Aug 02 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
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
Javascript----文件操作
2007/01/18 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
矫正人员思想汇报
2014/01/08 职场文书
学术会议邀请函范文
2014/01/22 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
负责培养人意见
2015/06/05 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Python 数据可视化之Seaborn详解
2021/11/02 Python
Python函数对象与闭包函数
2022/04/13 Python
Golang入门之计时器
2022/05/04 Golang