python hmac模块验证客户端的合法性


Posted in Python onNovember 07, 2020

hmac模块:

比较两个函数的密钥是否一致:

import hmac
import os

msg = os.urandom(32)   #生成32位随机字节码

def wdc():
  key = b'wdc'  #密钥
  ret = hmac.new(key,msg)   #将字节码和key进行加密(必须都为bytes类型)创建一个对象ret
  digest = ret.digest()  #消化
  return digest  #返回消耗后的密文

def yhf():
  key1 = b'wdc'  #密钥
  ret1 = hmac.new(key1,msg)  #将字节码和key1进行加密(必须都为bytes类型)创建一个对象ret1
  digest1 = ret1.digest()   #消化
  return digest1 #返回消耗后的密文

wdc = wdc()
yhf = yhf()
result = hmac.compare_digest(wdc,yhf)  #比较两个密文是否一致,返回Fales/True
print(result)  #输出结果

验证客户端合法性:

服务端:

import os
import hmac
import socket
secret_key = b'wdc'   #密钥:必须为二进制编码
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()

def check_conn(conn):
  msg = os.urandom(32)  #生成一个32位bytes类型随机码
  conn.send(msg) #发送一个32位的随机字节码
  h = hmac.new(secret_key,msg)   #将密钥和生成的随机字节码匹配加密生成一个对象
  digest = h.digest()   #消化生成密文
  client_digest = conn.recv(1024)   #接收消息(客户端生成的密文)
  return hmac.compare_digest(digest,client_digest)  #比较服务端和接收的客户端的密文是否一致

conn,addr = sk.accept()
res = check_conn(conn)
if res:
  print('合法的客户端')
  conn.close()
else:
  print('不合法的客户端')
  conn.close()

sk.close()

客户端:

import hmac
import socket
secret_key = b'wdc'   #密钥:必须为二进制编码
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
msg = sk.recv(1024)   #接收信息(接收生成的32位字节码)
h = hmac.new(secret_key,msg)  #将密钥和生成的随机字节码匹配加密生成一个对象
digest = h.digest()   #消化生成密文
sk.send(digest)   #发送生成的密文

sk.close()

以上就是python hmac模块验证客户端的合法性的详细内容,更多关于python hmac模块的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python的迭代器与生成器实例详解
Jul 16 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
Python编写生成验证码的脚本的教程
May 04 Python
Python实现读取文件最后n行的方法
Feb 23 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
Python 实现顺序高斯消元法示例
Dec 09 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
Python字典和列表性能之间的比较
Jun 07 Python
python如何利用paramiko执行服务器命令
Nov 07 #Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 #Python
如何使用Django Admin管理后台导入CSV
Nov 06 #Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 #Python
python两种获取剪贴板内容的方法
Nov 06 #Python
用python写一个带有gui界面的密码生成器
Nov 06 #Python
python如何编写类似nmap的扫描工具
Nov 06 #Python
You might like
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python探索之SocketServer详解
2017/10/28 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
Python类super()及私有属性原理解析
2020/06/15 Python
python生成word合同的实例方法
2021/01/12 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
七一党日活动总结
2014/07/08 职场文书
个人自查自纠材料
2014/10/14 职场文书
2015年新教师工作总结
2015/04/28 职场文书
毕业证明书
2015/06/19 职场文书