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
标签:hashlib,update,哈希,encode,hmac,md5 From: https://www.cnblogs.com/caroline2016/p/18454590