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

 更新时间:2019年11月25日 14:29:57   作者:Mr-chen  
在本篇文章里小编给大家分享的是关于python模块hashlib(加密服务)知识点内容,有需要的朋友们可以学习下。

官方文案: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 多张图片合并成一个pdf的参考示例

    Python 多张图片合并成一个pdf的参考示例

    最近需要将记的笔记整理成一个pdf进行保存,所以就研究了一下如何利用 Python 代码将拍下来的照片整个合并成一个pdf
    2021-06-06
  • Matplotlib绘图基础之几何图形的绘制详解

    Matplotlib绘图基础之几何图形的绘制详解

    除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外,matplotlib 也可以在画布上任意绘制各类几何图形,下面小编就来和大家讲讲如何绘制常见的几种几何图形吧
    2023-08-08
  • Pytorch GPU显存充足却显示out of memory的解决方式

    Pytorch GPU显存充足却显示out of memory的解决方式

    今天小编就为大家分享一篇Pytorch GPU显存充足却显示out of memory的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python正则表达式常见的知识点汇总

    python正则表达式常见的知识点汇总

    正则表达式提供了一些可用的匹配模式,比如忽略大小写、多行匹配等,下面这篇文章主要给大家介绍了关于python正则表达式常见的知识点,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 利用Python+Selenium破解春秋航空网滑块验证码的实战过程

    利用Python+Selenium破解春秋航空网滑块验证码的实战过程

    本文给大家介绍使用Python+Selenium破解春秋航空网滑块验证码的实战过程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • Python format补0的实现方法

    Python format补0的实现方法

    对于一些数字的处理,我们可能需要让它们满足一定格式的要求,本文主要介绍了Python format补0的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python根据Excel表进行文件重命名的实现示例

    Python根据Excel表进行文件重命名的实现示例

    在日常办公过程中,批量重命名是经常使用的操作,本文主要介绍了Python根据Excel表进行文件重命名,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Python OpenCV超详细讲解透视变换的实现

    Python OpenCV超详细讲解透视变换的实现

    OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令,本篇文章带你通过OpenCV实现透视变换
    2022-04-04
  • Python使用PyQt5/PySide2编写一个极简的音乐播放器功能

    Python使用PyQt5/PySide2编写一个极简的音乐播放器功能

    这篇文章主要介绍了Python中使用PyQt5/PySide2编写一个极简的音乐播放器功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python 浮点数四舍五入需要注意的地方

    python 浮点数四舍五入需要注意的地方

    这篇文章主要介绍了python 四舍五入需要注意的地方,帮助大家避免一些不必要的坑,感兴趣的朋友可以了解下
    2020-08-08

最新评论