python模块hashlib(加密服务)知识点讲解


Posted in Python onNovember 25, 2019

官方文案:https://docs.python.org/zh-cn/3/library/hashlib.html

hashlib --- 安全哈希与消息摘要

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要digest algorithms算法呢?摘要算法又称哈希hash算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

hash算法

每种类型的hash都有一个构建器方法,返回一个hash对象和相同的简单接口。

例如:

使用sha256()创建一个SHA-256hash object。可以使用update()喂给它bytes-like object。然后可以用digest()或hexdigest()来获得数据的摘要。

hashlib模型有许多算法如:sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), and blake2s()。还有很多其他算法要看Python使用的OpenSSL libary。具体见文档。

使用algorithms_guaranteed常量,查看模块在所有平台都支持的算法:

>>> hashlib.algorithms_guaranteed
{'blake2s', 'sha256', 'sha3_512', 'sha1', 'shake_128', 'sha3_256', 'sha3_384', 'blake2b', 'sha3_224', 'sha512', 'md5', 'shake_256', 'sha224', 'sha384'}

使用algorithms_available常量,在编译器运行时可以的hash算法

>>> hashlib.algorithms_available
{'sha3_256', 'blake2b', 'md5', 'sha512_224', 'sha384', 'md4', 'sha256', 'sha512', 'whirlpool', 'sha224', 'sha512_256', 'shake_128', 'sha3_384', 'ripemd160', 'blake2s', 'sha3_512', 'sha1', 'sm3', 'shake_256', 'sha3_224', 'md5-sha1'}

例子:

>>> import hashlib
>>> m = hashlib.sha256()
>>> m.update(b" the spammish repetition")  #重复调用相当于,把bytes字节串相加。
>>> m.name  #hash算法的名字
'sha256'
>>> m.digest() #返回传入update()的数据的摘要
b'U<\x9bP\xb1\xa8\x9a\x9aE\x0f;h\xdb\x04\x11\xc1\x08\xfaH\xa7\t\xbfF\x91\x01\x13\xa1\x87\xb6\xd9`\x96'
>>> m.digest_size  #摘要的大小
>>> m.block_size  #hash算法内的块的大小
>>> m.hexdigest()  #返回一个字符串对象,一般用在安全的email或其他非binary环境
'553c9b50b1a89a9a450f3b68db0411c108fa48a709bf46910113a187b6d96096'
>>>

不同的算法安全不一样,sha256就比sha1安全,但越安全的算法不仅越慢,摘要长度更长。

摘要算法应用

保存用户输入的密码:正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如MD5.

摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

例子:

存储MD5的好处是即使运维人员能访问数据库,也无法获知用户的明文口令。

设计一个验证用户登录的函数,根据用户输入的口令是否正确,返回True或False:

# -*- coding: utf-8 -*-
db = {
  'michael': 'e10adc3949ba59abbe56e057f20f883e',
  'bob': '878ef96e86145580c38c87f0410ad153',
  'alice': '99b1c2188db85afee403b1536010c2c9'
}

import hashlib

def calc_md5(password):
  m = hashlib.md5()
  m.update(password.encode('utf-8'))
  return m.hexdigest()

def login(user, password):
  return db[user] == calc_md5(password)
    

# 测试:
assert login('michael', '123456')
assert login('bob', 'abc999')
assert login('alice', 'alice2008')
assert not login('michael', '1234567')
assert not login('bob', '123456')
assert not login('alice', 'Alice2008')
print('ok')

希望三水点靠木整理的相关知识点能够帮助到大家,感谢你们的支持。

Python 相关文章推荐
python 实现插入排序算法
Jun 05 Python
Python是编译运行的验证方法
Jan 30 Python
python学习必备知识汇总
Sep 08 Python
Django如何实现内容缓存示例详解
Sep 24 Python
python去除扩展名的实例讲解
Apr 23 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
python打开文件的方式有哪些
Jun 29 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
Pytest之测试命名规则的使用
Apr 16 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
Python3如何对urllib和urllib2进行重构
Nov 25 #Python
python pygame实现球球大作战
Nov 25 #Python
Python内置加密模块用法解析
Nov 25 #Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 #Python
Django项目基础配置和基本使用过程解析
Nov 25 #Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 #Python
python找出列表中大于某个阈值的数据段示例
Nov 24 #Python
You might like
sae使用smarty模板的方法
2013/12/17 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
语义化 H1 标签
2008/01/14 Javascript
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
python之信息加密题目详解
2019/06/26 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
大学生毕业的自我评价分享
2014/01/02 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
停电通知范文
2015/04/16 职场文书
高中开学感言
2015/08/01 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL