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中函数的参数定义和可变参数用法实例分析
Jun 04 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
执行Python程序时模块报错问题
Mar 26 Python
Python 发送邮件方法总结
Aug 10 Python
pytorch 使用半精度模型部署的操作
May 24 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
Python经常使用的一些内置函数
Apr 11 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
用PHP调用数据库的存贮过程!
2006/10/09 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php中常用的预定义变量小结
2012/05/09 PHP
php获取错误信息的方法
2015/07/17 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
python实现杨辉三角思路
2017/07/14 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python列表切片操作实例总结
2019/02/19 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Django Form常用功能及代码示例
2020/10/13 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
小学生元旦广播稿
2014/02/21 职场文书
大学生个人求职信
2014/06/02 职场文书
党员四风剖析材料
2014/08/27 职场文书
学习党章的体会
2014/11/07 职场文书
市场营销计划书
2015/01/17 职场文书
千手观音观后感
2015/06/03 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Python实现批量自动整理文件
2022/03/16 Python