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

作者:Mr-chen 时间:2022-11-30 20:38:20 

官方文案: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')

希望脚本之家整理的相关知识点能够帮助到大家,感谢你们的支持。

来源:https://www.cnblogs.com/chentianwei/p/11926871.html

标签:python,hashlib
0
投稿

猜你喜欢

  • asp如何编写翻页函数?

    2009-11-07 18:46:00
  • 14条最佳JS代码编写技巧[译]

    2009-11-09 19:37:00
  • Python使用ClickHouse的实践与踩坑记录

    2023-06-12 21:45:44
  • python简单获取数组元素个数的方法

    2023-03-08 15:39:29
  • 详解Python3序列赋值、序列解包

    2022-04-19 05:24:51
  • python 检测nginx服务邮件报警的脚本

    2023-08-04 17:34:10
  • PHP使用自定义key实现对数据加密解密的方法

    2023-08-21 12:48:37
  • windows下安装php的memcache模块的方法

    2023-11-20 05:47:38
  • PHP面向对象程序设计类的定义与用法简单示例

    2023-11-22 17:31:17
  • 对python中return与yield的区别详解

    2022-10-19 00:47:33
  • plsql与tsql的语法不同

    2009-09-13 17:33:00
  • ASP链接Mysql数据库 非DSN连接的方法

    2009-03-09 18:24:00
  • asp中字符编码转换的10个函数[荐]

    2007-11-11 10:32:00
  • javascript 跨浏览器的事件系统

    2010-07-28 19:34:00
  • Python format函数详谈

    2023-12-24 03:57:59
  • Firefox的默认样式表

    2008-05-09 12:06:00
  • 解决Python pandas plot输出图形中显示中文乱码问题

    2023-03-14 21:39:59
  • 给展示性图片增加提示工具条(黑白效果)

    2007-10-20 14:21:00
  • asp无组件上传并插入到数据库里

    2008-10-24 10:04:00
  • Python xlwt设置excel单元格字体及格式

    2023-03-10 06:04:39
  • asp之家 网络编程 m.aspxhome.com