Python中hmac的使用方法

引言

在Python中,hmac模块提供了一种方便的方法来生成HMAC(基于哈希的消息验证代码)。HMAC是一种涉及哈希函数和一个秘密密钥的消息认证码,对于具有消息认证要求的应用程序而言,它是一种非常有用和安全的算法。

基本用法

hmac模块实现了Python中的HMAC算法,可以用于数据完整性校验、防篡改等应用。下面我们来看一个基本的示例,用于模拟一个用户的登录过程。

import hmac
import hashlib

def user_login(username, password):
    # 模拟从数据库中获取用户信息
    db_password = 'e10adc3949ba59abbe56e057f20f883e' # 123456的MD5值
    key = 'mG8V37MFgqZH1mN9F7k3pEDQ' # 随机生成的密钥

    if hashlib.md5(password.encode('utf-8')).hexdigest() == db_password:
        message = '{}:{}:{}'.format(username, db_password, 'login')
        hmac_md5 = hmac.new(key.encode('utf-8'), message.encode('utf-8'), digestmod=hashlib.md5).hexdigest()
        return hmac_md5
    else:
        return 'password incorrect'

# 模拟登录过程
username = 'admin'
password = '123456'
hmac_md5 = user_login(username, password)
print('hmac_md5:', hmac_md5)

上面这段示例代码演示了一个用户登录的过程,先从数据库中获取用户的密码,然后将用户名、密码和操作(login)拼成一段字符串。接着使用HMAC算法计算这个字符串的消息摘要,并返回给用户。

可以看到,这是一个基本的用法示例,只需要导入hmac和hashlib两个库,就可以方便地使用HMAC算法了。

HMAC的应用

应用一:防止篡改

HMAC可以用于确保数据的完整性,避免数据被篡改。以HTTP请求为例,我们可以在请求中添加一个HMAC签名,服务器在接收到请求之后,使用同样的方式计算HMAC签名,然后将这个签名与请求中的签名进行对比。如果一致,说明数据没有被篡改;否则说明数据已经被篡改。

import requests
import hmac
import hashlib

url = 'http://api.example.com/userinfo'
app_key = 'fnaHFNliU94fWl9a' # 应用的秘钥
app_secret = 'v9a8sdfaxf9ajv0a89vsdjf98as' # 应用的密钥

# 构造请求参数
params = {
    'app_id': '123456',
    'timestamp': '20190101 12:00:00',
    'username': 'test',
    'password': '123456'
}

# 计算HMAC签名
message = '{}\n{}\n{}'.format(params['timestamp'], url, params)
signature = hmac.new(app_secret.encode('utf8'), message.encode('utf8'), digestmod=hashlib.sha256).hexdigest()

# 添加签名到请求头
headers = {
    'X-APP-SIGNATURE': signature,
}

# 发送POST请求
response = requests.post(url, headers=headers, data=params)
print('Response:', response.text)

这段示例代码演示了如何在请求中添加HMAC签名,并在服务器端进行验证。其中,params是请求参数,message是计算HMAC签名需要的消息体,signature是计算出来的HMAC签名。将这个签名添加到请求头中,发送POST请求,并获取响应结果。

应用二:加密通信

HMAC也可以和对称加密算法一起使用,实现安全的通信。假设有两个节点A和B要进行通信,它们事先共享一个秘钥。在通信过程中,首先对明文进行加密(假定使用AES算法),然后对密文进行计算HMAC,并将HMAC附加到密文中一起发送给对端。对端接收到密文之后,先校验HMAC的值,如果一致,则说明密文没有被篡改;否则说明密文已经被篡改。接着再对密文进行解密,获取明文内容。

import aes
import hmac
import hashlib

# 共享秘钥
key = 'mG8V37MFgqZH1mN9F7k3pEDQ'

# 加密明文
plaintext = b'This is a secret message!'
cipher = aes.AESCipher(key, aes.MODE_CBC).encrypt(plaintext)

# 计算HMAC并添加到密文中
hmac_md5 = hmac.new(key.encode('utf-8'), cipher, digestmod=hashlib.md5).hexdigest()
message = cipher + hmac_md5.encode('utf-8')

# 接收端验证HMAC
recv_cipher = message[:len(cipher)]
recv_hmac = message[len(recv_cipher):]
if hmac.new(key.encode('utf-8'), recv_cipher, digestmod=hashlib.md5).hexdigest() == recv_hmac.decode('utf-8'):
    plaintext = aes.AESCipher(key, aes.MODE_CBC).decrypt(recv_cipher)
    print('Plaintext:', plaintext)
else:
    print('HMAC verification failed!')

这段示例代码演示了使用HMAC算法与对称加密算法共同实现安全通信的过程。首先定义了一个共享秘钥,然后将待加密的数据进行AES加密,接着使用HMAC算法计算消息摘要,并将其附加到密文中。通信的另一端接收到数据之后,首先验证HMAC的值,如果一致,则说明密文没有被篡改;否则说明数据已经被篡改。接着再对密文进行解密,获取明文内容。

小结

本文对Python中HMAC的使用方法进行了介绍,从基本用法到实际应用,从防篡改到加密通信,多个方面阐述了HMAC的应用。通过本文的学习,比较全面了解了HMAC的使用方法,对于需要进行数据完整性校验、数据防篡改、加密通信的应用场景有很大的帮助。

原创文章,作者:TFOXB,如若转载,请注明出处:https://www.506064.com/n/317408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TFOXBTFOXB
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29

发表回复

登录后才能评论