Python内置模块hashlib、hmac与uuid用法分析

纸上星河
纸上星河
发布时间:2026-10-13| 4人浏览过
原创

本文详细介绍Python中hashlib、hmac和uuid三个内置模块的用法。hashlib支持MD5、SHA系列等不可逆消息摘要算法,可通过加盐增强安全性;hmac基于密钥和内容的加密机制,适用于挑战应答场景;uuid提供五种生成策略(uuid1至uuid5),其中uuid2未实现,其余方法基于时间戳、随机数或散列值确保全局唯一性。

本文介绍Python内置模块hashlib、hmac与uuid的具体用法,供读者参考学习。

一、hashlib

MD5和SHA算法属于消息摘要算法,用于生成固定长度的消息摘要。这类算法具有不可逆特性,但相同输入产生的摘要结果一致,因此可通过比对摘要值来验证数据的完整性。

SHA算法的安全性高于MD5,但计算耗时相对较长。

1、原始消息摘要

import hashlib
# ######## md5 ########
hash = hashlib.md5()
hash.update('admin')
print hash.hexdigest()
#21232f297a57a5a743894a0e4a801fc3
# ######## sha1 ########
hash = hashlib.sha1()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# d033e22ae348aeb5660fc2140aec35850c4da997 40
# ######## sha256 ########
hash = hashlib.sha256()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 64
# ######## sha384 ########
hash = hashlib.sha384()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782 96
# ######## sha512 ########
hash = hashlib.sha512()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec 128

2、加盐后摘要

由于相同消息经摘要算法生成的结果固定,攻击者可能通过撞库方式反推原始消息。解决方法是引入salt(盐值)与原始消息拼接后再进行计算,从而增加破解难度。

import hashlib
# ######## md5 ########
hash = hashlib.md5('898oaFs09f')
hash.update('admin')
print hash.hexdigest()
#以上等价与
hash = hashlib.md5()
hash.update('898oaFs09fadmin')
print hash.hexdigest()

二、HMAC

HMAC内部对创建的密钥和内容进行处理后再加密,安全性较高,通常用于挑战应答场景。

import hashlib
import hmac
h = hmac.new('keysstring')
h.update('hello')
print h.hexdigest(),len(h.hexdigest())
# 2ca7ac50a9bca542e58e0baad15f8383 32

三、UUID

UUID(通用唯一识别码)是128位的全局唯一标识符,通常由32字节的字符串表示。它确保了时间和空间上的唯一性,在Python中称为UUID,其他编程语言中可能称为GUID。

UUID通过MAC地址、时间戳、命名空间、随机数或伪随机数来保证生成ID的唯一性。

UUID主要包含五种实现算法(方法):

1、uuid1()——基于时间戳。由MAC地址、当前时间戳和随机数生成,可保证全球范围内的唯一性,但使用MAC地址可能带来安全风险,在局域网环境中可用IP地址替代MAC。 2、uuid2()——基于分布式计算环境DCE。算法与uuid1相同,但将时间戳的前4位置换为POSIX的UID。该方法在实际应用中较少使用。 3、uuid3()——基于名字的MD5散列值。通过计算名字和命名空间的MD5散列值得到,确保了同一命名空间中不同名字的唯一性,以及不同命名空间的唯一性,但同一命名空间下的同一名字会生成相同的UUID。 4、uuid4()——基于随机数。由伪随机数生成,存在一定的重复概率,该概率可计算得出。 5、uuid5()——基于名字的SHA-1散列值。算法与uuid3相同,区别在于使用SHA-1算法。

Python标准库中未实现uuid2算法。

import uuid
print uuid.uuid1()
print uuid.uuid3(uuid.NAMESPACE_DNS, 'testme')
print uuid.uuid4()
print uuid.uuid5(uuid.NAMESPACE_DNS, 'testme')
# 1a52b39e-a197-11e6-b5c6-8056f2d4c814
# 7a67f5d4-50fd-36f7-bbeb-1c739ab40b8c
# 0c0cc4f0-6ad0-40d3-a796-119dcfaddf60
# dac48d1f-a443-578c-8754-856842a2f98d

PS:对加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等): http://tools.jb51.net/password/txt_encode

MD5在线加密工具: http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具: http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具: http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具: http://tools.jb51.net/password/sha_encode

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python文件与目录操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

相关标签:

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

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 算法库。