python3常用库之哈希算法hashlib和hmac使用

hashlib

import hashlib

# MD5 是最常见的哈希算法,速度很快,生成结果是固定的128 bit/16字节,通常用一个32位的16进制字符串表示。
md5 = hashlib.md5()
md5.update("hello".encode())
print(md5.hexdigest())  # 5d41402abc4b2a76b9719d911017c592

# 数据量很大时分块多次调用update(),最后计算的结果一致
md5 = hashlib.md5()
md5.update("he".encode())
md5.update("llo".encode())
print(md5.hexdigest())  # 5d41402abc4b2a76b9719d911017c592

# SHA1 是另一种常见的哈希算法,结果是160 bit/20字节,通常用一个40位的16进制字符串表示。
# 比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法不仅越慢,而且哈希长度更长。
sha1 = hashlib.sha1()
sha1.update("he".encode("utf-8"))
sha1.update("llo".encode("utf-8"))
print(sha1.hexdigest())  # aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

hmac

# 对比数据的哈希值可以验证一段数据是否有效,例如,判断用户口令是否正确。
# 为了防止根据哈希值反推原始口令,在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样可以增加破解的难度,例如:md5(message + salt)。
# 加salt的哈希就是:计算一段message的哈希时,根据不同口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。
# 这实际上就是Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。
# Python自带的hmac模块实现了标准的Hmac算法。

import hmac

key = b"secret"
h = hmac.new(key, "hello".encode(), digestmod="MD5")
print(h.hexdigest())  # bade63863c61ed0b3165806ecd6acefc

h = hmac.new(key, "he".encode(), digestmod="SHA1")
h.update("llo".encode())
print(h.hexdigest())  # 5112055c05f944f85755efc5cd8970e194e9f45b

 

posted @   carol2014  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示