python模块之hashlib
hashlib模块实现了多种安全哈希和信息摘要算法的通用接口,包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5
注意点:
1. adler32及crc32哈希由zlib模块提供
2. 某些算法已知存在哈希碰撞弱点
哈希算法
每个hash算法都有一个同名的构造函数,并返回拥有相同接口的hash对象
sha1(), sha224(), sha256(), sha384(), sha512(), blake2b()以及blake2s()这些构造函数在hashlib模块中总是可用。md5()通常也可用,但在某些罕见的python版本(“FIPS compliant” build of Python
)中例外。取决于所用平台上python使用的OpenSSL,hashlib也支持某些额外的算法,在大多数平台上,sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256()都是可用的。
>>> import hashlib
>>> m = hashlib.sha256()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
或者更精简的方式:
>>> hashlib.sha256(b"Nobody inspects the spammish repetition").digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
hashlib.new(name[, data])
通用构造函数,name参数表示要使用的hash算法的名称,可以是上述列出的所有hash算法以及OpenSSL库支持的其他算法。使用算法名称构造函数较使用new()更快
>>> h = hashlib.new("sha256", b"Nobody inspects the spammish repetition")
>>> h.digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
hashlib.algorithms_guaranteed
所有平台的hashlib模块都支持的hash算法的名称集合。md5也在此集合中(Note that ‘md5’ is in this list despite some upstream vendors offering an odd “FIPS compliant” Python build that excludes it.
)。
hashlib.algorithms_available
当前运行的python解释器支持的hash算法的名称集合,在new()构造函数中使用都能被正确识别。同一算法可能以不同名称出现多次。
hashlib.algorithms_guaranteed的结果集总是hashlib.algorithms_available结果集的子集
hash.digest_size
hash对象的字节长度
hash.block_size
hash对象的内部块大小
hash.name
hash对象的名称
hash.update(data)
传递类字节参数(通常是bytes)更新hash对象。重复调用update()等同于单次的拼接调用:m.update(a); m.update(b)等同m.update(a+b)
从python3.1开始,为了更好的多线程性能,使用OpenSSL支持的hash算法且处理数据量大于2047个字节的update(或创建)操作发生时,将释放python全局解释器锁允许其他线程运行
hash.digest()
截止此方法调用时,update()已接收的数据的摘要,是一个可包含0到255之间所有字节的字节对象
hash.hexdigest()
类似于digest(),不过是以双倍长度的只包含十六进制数字的字符串对象返回摘要值。
hash.copy()
返回hash对象的克隆
SHAKE算法的可变长度摘要
The shake_128() and shake_256() algorithms provide variable length digests with length_in_bits//2 up to 128 or 256 bits of security
shake.digest(length)
同hash.digest()
shake.hexdigest(length)
同hash.hexdigest()
密钥导出
密钥导出和扩展算法是为安全密码散列设计的。类似sha1(password)这种简单算法不能有效抵御暴力破解,一个好的密码散列函数必须是可调节的,耗时的,并包含盐
hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)
pbkdf2_hmac()提供了使用PKCS#5填充的pbkdf2算法,使用HMAC作为伪随机函数。
hash_name表示HMAC的哈希摘要算法的名称,比如"sha1"或"sha256"。
password和salt是类字节对象,password长度应该限制在一个合理范围之间,salt长度应该在16个字节以上且来源恰当。
iterations表示迭代次数,基于hash算法以及机器计算能力设置。截止2013年,sha256算法建议最少进行10万次迭代
dklen表示导出密钥的长度。默认值为None,使用hash_name算法计算的hash对象的digest_size属性长度
>>> import hashlib, binascii
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
>>> binascii.hexlify(dk)
b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'
Note: A fast implementation of pbkdf2_hmac is available with OpenSSL. The Python implementation uses an inline version of hmac. It is about three times slower and doesn’t release the GIL.
hashlib.scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)
The function provides scrypt password-based key derivation function as defined in RFC 7914.
password和salt是类字节对象,password长度应该限制在一个合理范围之间,salt长度应该在16个字节以上且来源恰当。
n is the CPU/Memory cost factor, r the block size, p parallelization factor and maxmem limits memory (OpenSSL 1.1.0 defaults to 32 MiB). dklen is the length of the derived key.
BLAKE2
待补充...实在是编不下去了,对加密算法相关的知识太缺乏了
python模块之hashlib相关推荐
- Python模块学习——hashlib模块讲解
一:hashlib简介 1.什么叫hash: hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SH ...
- Python模块之hashlib:提供hash算法
算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常 ...
- python 模块学习 hashlib
一.hashlib概述 涉及加密服务:14. Cryptographic Services 其中 hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1.SHA224.SHA2 ...
- python模块之hashlib加密
40.加密模块:hashlib 1. >>> import hashlib >>> ret1 = hashlib.md5() >>> ret1.u ...
- python模块之hashlib 1
摘要算法 1. 摘要算法又称为哈希算法.散列算法,是通过函数将任意长度的数据转化成固定长度的数据串(通常用16进制的字符串表示). 2. 摘要算法将通过摘要函数f()将数据转化成固定长度的摘要(dig ...
- python hashlib模块_python3 hashlib模块
Python3 hashlib模块和hmac 模块(加密) hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha ...
- 每周一个 Python 模块 | hashlib
专栏地址:每周一个 Python 模块 hashlib 模块定义了用于访问不同加密散列算法的 API.要使用特定的哈希算法,需要先用适当的构造函数或new()创建哈希对象.然后,无论使用何种算法,对象 ...
- Python3.7模块之hashlib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等 这里以hashlib举例: import hashlibmd=hashlib.md5() md.update("你好 ...
- 常用模块之hashlib,configparser,logging模块
常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
最新文章
- 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)
- FlexoCalendar周日历出错的解决方法
- mysql约束sex_MySQL笔记--约束
- mysql有三种事务模式_MySQL之事务与三大范式
- SP1693 COCONUTS - 题解
- FlashFXP列表参数错误解决方法
- 抖音内测语音直播功能 支持8位观众同时在线聊天
- 动态添加表格点击事件
- Android Sensors (3) 传感器坐标系统
- Eclipse SVN插件Subclipse和Subversive简介
- SoundPool概述
- matlab tic and toc,什么是Python等价于Matlab的tic和toc函数?
- html祝福语,日常祝福语大全简短的
- c语言完美素数反思,《素数和合数》优秀教学反思
- 打开cad图纸计算机打不开,电脑上CAD软件为何打不开?打开电脑CAD软件方法!
- 常见的登录逻辑漏洞总结
- 【第162期】游戏策划:几年面试下来,发现自我介绍是有窍门的
- 字节跳动搞外卖,“心动”面前三道坎
- 多元统计分析最短距离法_(完整word版)多元统计分析模拟试题
- Mac下安装i386编译工具
热门文章
- mysql010函数使用.单行函数.多行函数
- Gitee 如何自动部署博客 Pages?推荐用这个GitHub Actions!
- 程序员一定会有35岁危机吗?
- docker mysql Exit 1
- 微软IE 9 Beta全程体验图集
- sysctl.conf工作原理
- pycharm 快捷键介绍
- EIGRP stub SIA
- The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
- 好用的shell工具_精选5个酷毙的Python工具