首页 > 编程语言 >31.Python基础篇-hmac模块

31.Python基础篇-hmac模块

时间:2024-12-21 18:08:53浏览次数:8  
标签:Python 31 sk conn 哈希 msg hmac digest

hmac与hashlib模块的区别

hmac模块

  • 基于 hashlib 提供的哈希算法,在计算哈希时加入了一个“密钥”。
  • 主要用于生成“消息认证码”(MAC),通过一个密钥和数据共同生成哈希值,以此来验证数据的完整性和身份。
  • 需要密钥,它的目的是防止消息篡改并验证消息是否来源于可信的发送方。

hashlib

  • 主要用于计算消息的哈希值,支持多种哈希算法,如 MD5、SHA-1、SHA-256 等。
  • 计算的是“纯粹的”哈希值,即输入数据的哈希摘要。
  • 没有密钥相关的操作,因此主要用于数据完整性验证和指纹生成。

hmac的使用场景,同时介绍如何使用

使用hmac生成密钥,发送给要连接的客户端。用于检验客户端的合法性

server端代码 :

import hashlib
import hmac
import socket
import os

secret_key = b'python'  # 一个密钥,客户端与服务端约定好的
# ...
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))
sk.listen()
conn, addr = sk.accept()

def check_conn(conn):
    """
    校验客户端的合法性
    :param conn:
    :return:
    """
    msg = os.urandom(32)  # 随机生成一个32位的内容
    conn.send(msg)
    # hmac.new()  用于创建一个新的 HMAC 对象,初始化 HMAC 计算。它需要密钥、消息和哈希算法作为输入。
    h = hmac.new(secret_key, msg, digestmod=hashlib.sha256)

    # 获取最终的 HMAC 结果,返回的是原始的字节数据(消息认证码)
    digest_msg = h.digest()
    
    client_digest_msg = conn.recv(1024)  # 客户端收到随机数后,使用与server相同的方式进行加密,并发给服务端
    
    # 服务端将自己的加密结果与客户端的加密结果进行比较
    return hmac.compare_digest(digest_msg, client_digest_msg)
res = check_conn(conn)
if res is True:
    print("合法的登录")
    conn.close()
else:
    print("不合法的登录")
    conn.close()

 

client端代码:

import hashlib
import socket
import hmac

secret_key = b'python'  # 一个密钥,客户端与服务端约定好的

sk = socket.socket()
sk.connect(('127.0.0.1', 8080))

msg = sk.recv(1024)  # 收到服务端发过来的随机数

# 使用与服务端同样的密钥,随机数,哈希算法,进行加密
h = hmac.new(secret_key, msg, digestmod=hashlib.sha256)

# 获取最终的结果,并发给服务端。对方验证客户端是否合法
digest_msg = h.digest()
sk.send(digest_msg)
sk.close()

 

标签:Python,31,sk,conn,哈希,msg,hmac,digest
From: https://www.cnblogs.com/mingbo-1/p/18621007

相关文章

  • 2024-2025-1 20231420《计算机基础与程序设计》第十二周助教总结
    课程答疑C语言:指针、结构体、文件C语言中,指针、结构体十分重要,也较为困难;大家刚接触文件的操作,可能比较陌生,未能掌握文件的相关操作。大家要深入学习指针、结构体、文件的相关语法,这对之后的课程也很有帮助,可以借助网络资源学习,也要多敲代码,多多练习。课程作业中出现的问题格......
  • python毕设 旅游景点推荐系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于旅游景点推荐系统的研究,现有研究主要集中在基于用户评价或固定算法的推荐方面,专门针对结合Python语言构建的旅游景点推荐系统的研......
  • Python中实现对数字字符串按位求和——sum()&map()
    要快速给数字字符串的每一位数求和,可以使用Python的内置函数来实现。以下是几种常见的方法:1.使用sum()和map()number_str='12345'result=sum(map(int,number_str))print(result)#输出:15解释:map(int,number_str):将字符串中的每一位字符转换为整数。m......
  • 30.Python基础篇-socket模块
    介绍socket模块是用于实现网络通信的模块。它提供了底层网络操作的接口,使得用户可以通过网络实现客户端和服务器之间的数据传输。通过socket模块,程序可以通过网络进行数据传输、连接和通信。使用socket模块创建一个TCP服务server端代码#server端代码importsocketsk......
  • 【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
    【华为OD-E卷-寻找关键钥匙100分(python、java、c++、js、c)】题目小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定密码K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为1~N。每个箱子中都有一个字符串s,字符串由大写字母、小写字母、数字、标点符号......
  • 【华为OD-E卷-最多提取子串数目 100分(python、java、c++、js、c)】
    【华为OD-E卷-最多提取子串数目100分(python、java、c++、js、c)】题目给定[a-z],26个英文字母小写字符串组成的字符串A和B,其中A可能存在重复字母,B不会存在重复字母,现从字符串A中按规则挑选一些字母,可以组成字符串B。挑选规则如下:同一个位置的字母只能挑选一次......
  • 数据结构与算法Python版 散列与区块链
    文章目录一、散列二、完美散列函数三、完美散列函数的应用-区块链一、散列散列Hashing构造一个新的数据结构,使得查找算法的复杂度降到O(1),这种概念称为“散列Hashing”由数据项的值来确定其存放位置,数据项应该出现在大概什么位置,就可以直接到那个位置看看数据项是......
  • 数据结构与算法Python版 顺序查找与二分查找
    文章目录一、顺序查找二、二分查找一、顺序查找顺序查找SequentialSearch通过下标,我们就可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系在Python列表中,这些数据项的存储位置......
  • 29.Python基础篇-网络基础理论
    重要知识点BS与CS架构BS(Browser/Server)架构:基于浏览器和服务器的架构,客户端通过浏览器访问服务器上的应用程序或服务。特点:客户端只需要一个浏览器,无需安装复杂的软件,服务器端处理大部分业务逻辑。应用:Web应用(如Web浏览器访问网站)。CS(Client/Server)架构:客户端和服务......
  • 基于 Django和Python 的影视数据可视化系统
    文章目录程序资料获取一、项目技术二、项目内容和项目介绍三、核心代码四、效果图五、资料获取程序资料获取......