Python中消息身份验证的键哈希

可以通过HMAC机制在python中使用加密哈希函数进行消息身份验证。我们可以将HMAC与多个可迭代的哈希函数(例如MD5,SHA-1)与秘密共享键结合使用。

基本思想是通过生成实际数据的加密哈希与共享键组合来保护我们的数据。最终结果在没有键的情况下发送,但是生成的哈希可以用于检查传输或存储的消息。

语法

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

返回一个生成新的hmac对象。

哪里-

  • 键–此处共享的秘密键。

  • 消息-此处要散列的消息此处要散列的消息

  • Digestmod – HMAC对象要使用的摘要名称或模块

HMAC模块的方法和属性-

  • hmac.update(消息)

    用于使用给定的消息更新hmac对象。如果多次调用此方法,消息将被附加。

  • hmac.digest()

    返回update()到目前为止传递给该方法的字节的摘要。

  • hashlib.hexdigest()

    digest()以外的摘要是作为字符串返回两次仅包含十六进制数字的长度。这可用于在电子邮件或其他非二进制环境中安全地交换值。

  • haslib.copy()

    返回hmac对象的副本(“克隆”)。

例1

使用默认的MD5哈希算法创建哈希。

#Import libraries
import hashlib
import hmac
#data
update_bytes = b'Lorem ipsum dolor sit amet, consectetur adipiscing elit. \
   Suspendisse tristique condimentum viverra. Nulla accumsan \
   orci risus, non congue lacus feugiat id.'
#secret key
password = b'402xy5#'
#Generate cryptographic hash using md5
my_hmac = hmac.new(update_bytes, password, hashlib.md5)
print("The first digest: " + str(my_hmac.digest()))
print("The Canonical Name: " + my_hmac.name)
print("Block size: " + str (my_hmac.block_size) + "bytes")
print("Digest size: " + str(my_hmac.digest_size) + "bytes")
#Create a copy of the hmac object
my_hmac_cpy = my_hmac.copy()
print("The Copied digest: " + str(my_hmac_cpy.digest()))

输出结果

The first digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'
The Canonical Name: hmac-md5
Block size: 64bytes
Digest size: 16bytes
The Copied digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'

因为SHA1被认为比MD5算法更安全,并且如果您正在考虑使用SHA1算法运行上述程序。只需在此行中修改算法名称,

my_hmac = hmac.new(update_bytes,password,hashlib.sha1)
,我们的结果将类似于:

第一个摘要:b'\ xc3T \ xe7 [\ xc8 \ xa3O / $\ xbd`A \ xad \ x07d \ xe8 \ xae \ xa2!\ xb4'

The Canonical Name: hmac-sha1
Block size: 64bytes
Digest size: 20bytes
The Copied digest: b'\xc3T\xe7[\xc8\xa3O/$\xbd`A\xad\x07d\xe8\xae\xa2!\xb4'

应用领域

HMAC身份验证机制可以在安全性很重要的任何地方使用,例如公共网络服务。例如,在公共网络中,我们通过管道或套接字发送重要的文件/数据,应对该文件/数据进行签名,然后在使用数据之前测试签名。