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

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

本文详细介绍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 相关产品和应用

全部下载

专题列表