Python内置加密模块用法解析


Posted in Python onNovember 25, 2019

这篇文章主要介绍了Python内置加密模块用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

数据加密:

  • 对称加密:数据加密和解密使用相同的密钥,主要解决数据的机密性(DES,AES)
  • 非对称加密(公匙加密):数据加密和解密使用的不同密钥,主要用于身份的验证(DSA,RSA)
  • 单向加密:只能加密不能解密,主要用于解决数据的完整性(MD5,SHA系列算法)

Python内置加密模块:

hashlib 主要提供了一些常见的单向加密算法(如MD5,SHA等)
hmac 单向加密算法,支持设置一个额外的密匙(salt)来提高安全性
secrets Python3.6新增用于获取安全随机数

1.hashlib 模块

其中主要包含了MD5和SHA模块的功能,还提供了如MD5,SHA1,SHA224,SHA256,SHA384和SHA512(输出长度不同)等算法的函数实现

hashlib模块包含的函数与属性:

hashlib.new(name[,data]) 用于构造指定的哈希算法所对应的哈希对象,name可用于指定哈希算法的名称,如‘MD5',‘sha1',不分大小写,data为一个可选参数
hashlib.algorithms_guaranteed 它的值是一个该模块在所有平台都会支持的哈希算法的名称集合:set(['sha1','sha224','sha384','sha256','sha512','md5'])
hashlib.algorithms_available 它的值是一个当前运行的Python解释器中可用的哈希算法的名称集合,algorithms_guaranteed将永远是它的子集

hash对象包含的方法与属性:

hash.update() 更新哈希对象所要计算的数据,多次调用为累加效果,如m.update(a);m.update(b)等价于m.update(a+b)
hash.digest() 以二进制格式返回传递给update()函数的所有数据的摘要信息(字符串)
hash.hexdigest() 以十六进制格式返回传递给update()函数的所有数据的摘要信息(字符串)
hash.copy() 可用来有效计算共享一个初始子串的数据的摘要信息
hash.digest_size hash结果的字节大小,即hash.digest()方法返回结果的字符串长度,MD5:16,sha1:20,sha224:28
hash.block_size hash算法内部块的字节大小
hash.name 当前hash对象对应的哈希算法的标准名称(小写形式),可以直接传递hashlib.new()函数来创建另外一个同类型的哈希对象

实例:

important

import hashlib

hash = hashlib.md5()
hash.update(b'Hello, ')
hash.update(b'World!')
ret1 = hash.digest()     # 以二进制格式返回数据的加密信息
print(type(ret1), len(ret1), ret1)
ret2 = hash.hexdigest()    # 以十六进制返回加密的数据值
print(type(ret2), len(ret2), ret2)

result

<class 'bytes'> 16 b'e\xa8\xe2}\x88y(81\xb6d\xbd\x8b\x7f\n\xd4'
<class 'str'> 32 65a8e27d8879283831b664bd8b7f0ad4

注: 只要输入的内容和加密模式相同,则输出的密匙就相同

Python内置加密模块用法解析

2.hmac模块

实现了HAMC算法,与hashlib提供的API基本一致

hamc模块提供的函数:

hamc.new(key,msg=None,digestmod=None) 用于创建一个hmac对象,key为密钥,msg为初始数据,digestmod为所使用的哈希算法,默认为hashlib.md5
hmac.compare_digest(a,b) 比较两个hmac对象,返回的是a==b的值

hamc对象中提供的方法与属性 与 hash对象中一致

实例:

improtant

import hmac

h1 = hmac.new(b'yeah', b'a', digestmod=hashlib.sha224)   # digestmod 默认为MD5
h1.update(b'hello')
ret1 = h1.digest()  # 二进制
ret2 = h1.hexdigest()  # 十六进制
print(type(ret1), ret1)
print(type(ret2), ret2)

h2 = hmac.new(b'yeah', b'name')  
ret3 = h2.hexdigest()
c = hmac.compare_digest(ret2, ret3)   # 比较同类型进制的值
print(c)

result

<class 'bytes'> b'&\x9a\xd0{\x15WTE9@\xd9\xe3z\xfb+\\o\xc5\x88\x7f\x1c\xa4Q\xaf\x0c\n\xa8E'
<class 'str'> 269ad07b155754453940d9e37afb2b5c6fc5887f1ca451af0c0aa845
False

3.secrets模块

生成用于管理密码、账户验证信息、安全令牌和相关秘密信息等数据的密码强随机数

secrets模块的两种操作:

  • 生成安全随机数
  • 生成一个笃定长度的随机字符串(可用作令牌和安全URL)

secrets模块提供的函数:

secrets.choice(sequence) 从指定的非空序列中随机选择一个元素并返回
secrets.randbelow(n) 从半开区间[0,n]内随机返回一个整数
secrets.randbits(k) 返回一个带有k个随机位的整数
secrets.token_bytes(nbytes=None) 返回一个包含nbytes个字节的随机字符串
secrets.token_hex(nbytes=None) 返回一个包含nbytes字节的16进制格式的随机文本字符串,可以用来生成一个随机密码
secrets.token_urlsafe([nbytes]) 返回一个包含nbytes个字节的随机安全URL文本字符串,可以在提供重置密码的应用中用来生成一个临时的随机令牌
secrets.compare_digest(a,b) 比较a,b字符串是否相等,若相等,返回True

实例:

important

import secrets
a = range(0, 99)
s = secrets.choice(a)
b = secrets.randbelow(77)
print(s)
print(b)
print(secrets.randbits(k=6))
print(secrets.token_bytes(nbytes=2))
print(secrets.token_hex(nbytes=2))
print(secrets.token_urlsafe(2))
print(secrets.compare_digest('a', 'b')) # 比较'字符串'

result

32
b'op'
b248
LNI
False

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

Python 相关文章推荐
用python实现批量重命名文件的代码
May 25 Python
python解析文件示例
Jan 23 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
python实现下载文件的三种方法
Feb 09 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 #Python
Django项目基础配置和基本使用过程解析
Nov 25 #Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 #Python
python找出列表中大于某个阈值的数据段示例
Nov 24 #Python
python对Excel按条件进行内容补充(推荐)
Nov 24 #Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 #Python
Python 中判断列表是否为空的方法
Nov 24 #Python
You might like
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
php在线解压ZIP文件的方法
2014/12/30 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
thinkphp分页集成实例
2017/07/24 PHP
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
详解Vue方法与事件
2017/03/09 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
用Python给文本创立向量空间模型的教程
2015/04/23 Python
python Django模板的使用方法
2016/01/14 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python多进程写入同一文件的方法
2019/01/14 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
年度考核自我评价
2014/01/25 职场文书
幼师自我鉴定
2014/02/01 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技