Python3 hashlib模块:密码散列算法原理与实战应用

沈知远
沈知远
发布时间:2026-10-13| 5人浏览过
原创

本文深入解析Python3中hashlib模块的使用原理,涵盖MD5、SHA系列等主流密码散列算法。通过具体代码示例展示如何创建散列对象、计算摘要及处理Unicode数据,并重点讲解利用update方法进行增量更新以优化大文件处理效率的实战技巧。

hashlib模块概述

1.hashlib密码散列

hashlib模块提供了一套统一的API接口,用于访问多种不同的密码散列算法。在实际使用中,开发者可以通过调用相应的构造器函数或new()方法来创建特定的散列对象。无论选择哪种具体的算法,这些对象均遵循相同的操作接口规范。

支持的散列算法

1.1 散列算法

得益于OpenSSL提供的底层支持,hashlib能够使用OpenSSL库中提供的所有算法,具体包括:

  • md5
  • sha1
  • sha224
  • sha256
  • sha384
  • sha512

部分算法在所有平台上均可用,而另一些则依赖于底层库的支持。这两种情况分别通过algorithms_guaranteed和algorithms_available属性来提供查询。

算法可用性查询示例


import hashlib
print('Guaranteed:\n{}\n'.format(
  ', '.join(sorted(hashlib.algorithms_guaranteed))))
print('Available:\n{}'.format(
  ', '.join(sorted(hashlib.algorithms_available))))

Guaranteed: blake2b, blake2s, md5, sha1, sha224, sha256, sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256 Available: DSA, DSA-SHA, MD4, MD5, RIPEMD160, SHA, SHA1, SHA224, SHA256, SHA384, SHA512, blake2b, blake2s, dsaEncryption, dsaWithSHA, ecdsa-with-SHA1, md4, md5, ripemd160, sha, sha1, sha224, sha256, sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256, whirlpool

MD5计算实战

1.2 MD5示例

若要为一个数据块(在此例中为转换为字节串的Unicode字符串)计算MD5散列或摘要,首先需要创建散列对象,接着添加数据,最后调用digest()或hexdigest()方法。

MD5代码示例


import hashlib
lorem = '''Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.'''
h = hashlib.md5()
h.update(lorem.encode('utf-8'))
print(h.hexdigest())

本示例采用了hexdigest()方法而非digest(),目的是格式化输出以便清晰打印。若接受二进制摘要值,则可直接使用digest()。

SHA1计算实战

1.3 SHA1示例

SHA1摘要的计算方式与上述过程相同。

SHA1代码示例


import hashlib
lorem = '''Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.'''
h = hashlib.sha1()
h.update(lorem.encode('utf-8'))
print(h.hexdigest())

由于MD5和SHA1算法存在差异,因此生成的摘要值也会不同。

增量更新技术

1.4 增量更新

散列计算器的update()方法支持反复调用。每次调用时,都会根据提供的附加文本更新摘要。相比将整个文件一次性读入内存,增量更新不仅效率更高,且能生成完全相同的结果。

增量更新代码示例


import hashlib
lorem = '''Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.'''
h = hashlib.md5()
h.update(lorem.encode('utf-8'))
all_at_once = h.hexdigest()
def chunkize(size, text):
  "Return parts of the text in size-based increments."
  start = 0
  while start < len(text):
    chunk = text[start:start + size]
    yield chunk
    start += size
  return
h = hashlib.md5()
for chunk in chunkize(64, lorem.encode('utf-8')):
  h.update(chunk)
line_by_line = h.hexdigest()
print('All at once :', all_at_once)
print('Line by line:', line_by_line)
print('Same    :', (all_at_once == line_by_line))

此示例展示了在读取或生成数据时,如何以增量方式更新摘要。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。