Python中hmac的使用方法

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

引言

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

基本用法

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

 import hmac import hashlib def user_login(username, password): # 模拟从数据库中获取用户信息 db_password = 'e10adc3949ba59abbe56e057f20f883e' # 的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 = '' 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': '', 'timestamp': ' 12:00:00', 'username': 'test', 'password': '' } # 计算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的使用方法,对于需要进行数据完整性校验、数据防篡改、加密通信的应用场景有很大的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/19989.html

(0)
上一篇 2024-08-01
下一篇 2024-08-01

相关推荐

  • 如何在Linux上卸载Python 3

    如何在Linux上卸载Python 3Python是一种非常流行的编程语言,常用于数据处理、Web应用程序和自动化脚本。在Linux系统中,Python通常是默认安装的,但是有时候需要移除或卸载Python 3。在本文中,我们将会探讨如何在Linux上卸载Python 3。

    2024-09-03
    23
  • 度小满严澄:数据科学与金融风控模型

    度小满严澄:数据科学与金融风控模型导读: 众所周知,信息时代下的数据就是能源,就是生产力。但是面对海量、纷繁的数据,特别是在金融领域,如何充分地利用数据是核心问题。本次分享主要想和大家一起探讨下,在金融风控场景下,如何通过数据对齐模型

    2023-05-13
    141
  • win10上安装mysql8 并配置主从复制[通俗易懂]

    win10上安装mysql8 并配置主从复制[通俗易懂]最近在学习springboot,想整理一篇博客,关于springboot整合mybatis并配置主从数据库的,但是电脑win10系统上并没有配置mysql主从数据库。所以花了几天的时间终于整好了。在这

    2023-02-08
    150
  • Hadoop学习1「建议收藏」

    Hadoop学习1「建议收藏」一.Hadoop社区版和发行版 社区版:我们把Apache社区一直开发的Hadoop称为社区版。简单的说就是Apache Hadoophttp://hadoop.apache.org/ 发行版:基于A

    2023-03-03
    166
  • Python是面向对象的

    Python是面向对象的Python作为一门高级编程语言,具有简洁、易懂、高效、可移植和开源等优点,在各种应用场景下得到了广泛的应用。Python的面向对象编程范式为程序员提供了更为清晰灵活的设计思路和更高效的代码组织方式。在本文中,我们将从多重角度,详细探讨Python作为面向对象的编程语言的特征和优势,帮助读者更加深入理解Python面向对象编程思想的精髓。

    2024-05-13
    75
  • 今日讨论荣耀5G手机有哪些比较不错的推荐「终于解决」

    今日讨论荣耀5G手机有哪些比较不错的推荐「终于解决」  最近这一段时间,各大手机厂商一直发布争相发布新款5G手机,再度掀起了5G手机的热潮,看到很多网友在网上问5G手机有哪些不错的选择,我作为一个资深科技宅,现在为大家来推荐几款好用的5G手机。   …

    2023-02-20
    145
  • 基于keepalived配置数据库主从实现高可用[亲测有效]

    基于keepalived配置数据库主从实现高可用[亲测有效]基于keepalived配置数据库主从实现高可用 使用keepalived来监听端口,实现数据库的高可用。实现效果,其中一台数据库服务器突然出故障或关机时,应该不影响应用正常运行,等待服务器启动之后…

    2023-03-16
    144
  • eclipse依赖包_es修改索引字段属性

    eclipse依赖包_es修改索引字段属性es依赖包我们通常指两个org.elasticsearch:elasticsearch和org.elasticsearch.client:elasticsearch-rest-high-level-c

    2023-04-30
    162

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注