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"。

passwordsalt是类字节对象,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.

passwordsalt是类字节对象,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相关推荐

  1. Python模块学习——hashlib模块讲解

    一:hashlib简介 1.什么叫hash: hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SH ...

  2. Python模块之hashlib:提供hash算法

    算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常 ...

  3. python 模块学习 hashlib

    一.hashlib概述 涉及加密服务:14. Cryptographic Services 其中 hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1.SHA224.SHA2 ...

  4. python模块之hashlib加密

    40.加密模块:hashlib 1. >>> import hashlib >>> ret1 = hashlib.md5() >>> ret1.u ...

  5. python模块之hashlib 1

    摘要算法 1. 摘要算法又称为哈希算法.散列算法,是通过函数将任意长度的数据转化成固定长度的数据串(通常用16进制的字符串表示). 2. 摘要算法将通过摘要函数f()将数据转化成固定长度的摘要(dig ...

  6. python hashlib模块_python3 hashlib模块

    Python3 hashlib模块和hmac 模块(加密) hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha ...

  7. 每周一个 Python 模块 | hashlib

    专栏地址:每周一个 Python 模块 hashlib 模块定义了用于访问不同加密散列算法的 API.要使用特定的哈希算法,需要先用适当的构造函数或new()创建哈希对象.然后,无论使用何种算法,对象 ...

  8. Python3.7模块之hashlib

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等 这里以hashlib举例: import hashlibmd=hashlib.md5() md.update("你好 ...

  9. 常用模块之hashlib,configparser,logging模块

    常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...

最新文章

  1. 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)
  2. FlexoCalendar周日历出错的解决方法
  3. mysql约束sex_MySQL笔记--约束
  4. mysql有三种事务模式_MySQL之事务与三大范式
  5. SP1693 COCONUTS - 题解
  6. FlashFXP列表参数错误解决方法
  7. 抖音内测语音直播功能 支持8位观众同时在线聊天
  8. 动态添加表格点击事件
  9. Android Sensors (3) 传感器坐标系统
  10. Eclipse SVN插件Subclipse和Subversive简介
  11. SoundPool概述
  12. matlab tic and toc,什么是Python等价于Matlab的tic和toc函数?
  13. html祝福语,日常祝福语大全简短的
  14. c语言完美素数反思,《素数和合数》优秀教学反思
  15. 打开cad图纸计算机打不开,电脑上CAD软件为何打不开?打开电脑CAD软件方法!
  16. 常见的登录逻辑漏洞总结
  17. 【第162期】游戏策划:几年面试下来,发现自我介绍是有窍门的
  18. 字节跳动搞外卖,“心动”面前三道坎
  19. 多元统计分析最短距离法_(完整word版)多元统计分析模拟试题
  20. Mac下安装i386编译工具

热门文章

  1. mysql010函数使用.单行函数.多行函数
  2. Gitee 如何自动部署博客 Pages?推荐用这个GitHub Actions!
  3. 程序员一定会有35岁危机吗?
  4. docker mysql Exit 1
  5. 微软IE 9 Beta全程体验图集
  6. sysctl.conf工作原理
  7. pycharm 快捷键介绍
  8. EIGRP stub SIA
  9. The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
  10. 好用的shell工具_精选5个酷毙的Python工具