📜  hmac – 用于消息身份验证的键控哈希

📅  最后修改于: 2022-05-13 01:54:40.226000             🧑  作者: Mango

hmac – 用于消息身份验证的键控哈希


HMAC 是一种使用加密散列函数进行消息认证的机制。 HMAC 可以与任何迭代加密散列函数一起使用,例如 MD5、SHA-1,并与秘密共享密钥结合使用。
该模块实现了 HMAC 算法。基本思想是生成实际数据与共享密钥相结合的加密散列。然后可以使用生成的散列来检查传输或存储的消息以确定信任级别,而无需传输密钥。

hmac.new(key, msg=None, digestmod=None) 

返回一个新的 hmac 对象。 key是一个字节或字节数组对象,提供密钥。如果存在msg ,则进行方法调用 update(msg)。 digestmod是要使用的 HMAC 对象的摘要名称、摘要构造函数或模块。它支持任何适合 hashlib.new() 的名称。

HMAC 对象具有以下方法:

  1. HMAC.update(msg):此方法使用 msg 更新 hmac 对象。重复调用等效于连接所有参数的单个调用: m.update(a); m.update(b) 等价于 m.update(a + b)。
  2. HMAC.digest():此方法返回到目前为止传递给 update() 方法的字节的摘要。此字节对象将与提供给构造函数的摘要的摘要大小相同。
  3. HMAC.hexdigest():此方法类似于 digest() 方法,不同之处在于摘要作为长度为仅包含十六进制数字的两倍的字符串返回。
  4. HMAC.copy():此方法返回 hmac 对象的副本或克隆。这可用于有效地计算共享公共初始子字符串的字符串的摘要。

哈希对象具有以下属性:

  • HMAC.digest_size:生成的 HMAC 摘要的大小(以字节为单位)。
  • HMAC.block_size:哈希算法的内部块大小,以字节为单位。
  • HMAC.name:此 HMAC 的规范名称。例如 hmac-sha1。

例子:

# Python 3 code to demonstrate the working of hmac module.
  
import hmac
import hashlib
  
# creating new hmac object using sha1 hash algorithm
digest_maker = hmac.new(b'secret-key', b'msg', hashlib.sha1)
  
# print the Hexdigest of the bytes passed to update
print ("Hexdigest: " + digest_maker.hexdigest())
  
# call update to update msg
digest_maker.update(b'another msg')
  
# print the Hexdigest of the bytes passed to update
print ("Hexdigest after update: " + digest_maker.hexdigest())
  
print ("Digest size: " + str(digest_maker.digest_size) + " bytes")
print ("Block size: " + str(digest_maker.block_size) + " bytes")
print ("Canonical name: " + digest_maker.name)
  
# print the digest of the bytes passed to update
print ("Digest: ", end =" ")
print (digest_maker.digest())
  
# create a copy of the hmac object
digest_clone = digest_maker.copy()
print ("Hexdigest of clone: " + digest_clone.hexdigest())

输出:

Hexdigest: df2ae7cdb5c849001e33ee29eb1c51ba2cafbaa7
Hexdigest after update: 3923273eb3aa9328478eb5aabf2d96e185256b4b
Digest size: 20 bytes
Block size: 64 bytes
Canonical name: hmac-sha1
Digest:  b"9#'>\xb3\xaa\x93(G\x8e\xb5\xaa\xbf-\x96\xe1\x85%kK"
Hexdigest of clone: 3923273eb3aa9328478eb5aabf2d96e185256b4b