1.服务端

# 验证客户端是否合法
# 不依靠登陆认证 # 当有一个客户端访问你的时候,建立了tcp后,server端主动发起一个数据,数据为想加密的bytes类型的数据。
# 客户端拿到要加密的bytes类型的数据, # import hmac # 该模块与hashlib类似
# import os
#
# h = hmac.new() # secret_key 需要一个密钥,与想要加密的bytes类型数据
# content = h.digest() # 拿到一个密文内容
# hmac.compare_digest() # 比较 ,密文与另外一个密文
#
# print(os.urandom(32)) # 随机生成32个字节 import socket
import hmac # 该模块与hashlib类似
import os def check_conn(conn):
random_msg = os.urandom(32) # 得到一个随机的32个字节
conn.send(random_msg) # 随机发送32个字节
h = hmac.new(secret_key, random_msg) # 使用密钥secret_key对发送出去的32个随机字节进行加密得到一个hmac对象
digest = h.digest() # 由hmac对象得到一个密文
client_digest = conn.recv(1024)
return hmac.compare_digest(digest, client_digest) # 比较自己对32个字节加密后得到的密文,与客户端得到32个字节后加密得到的密文是否一样 secret_key = b'egg' # 密钥
sk = socket.socket() sk.bind(('127.0.0.1', 8090)) sk.listen() conn, addr = sk.accept() res = check_conn(conn)
if res:
print('合法的客户端')
conn.send(b'OK')
else:
print('不合法的客户端')
conn.send(b'NO') conn.close()
sk.close()

  

  客户端

import socket
import hmac secret_key = b'egg' sk = socket.socket() sk.connect(('127.0.0.1', 8090)) msg = sk.recv(1024) # 得到的是的32个随机字节 h = hmac.new(secret_key, msg) # 根据与服务端协商好的secret_key,对收到的32个随机字节进行加密,得到一个hmac对象 digest = h.digest() # 由hmac对象得到了32随机字节与secret_key加密后的密文内容 sk.send(digest) # 将密文内容发送到服务端 print(sk.recv(1024).decode('utf-8')) sk.close()

hmac检验客户端合法性的更多相关文章

  1. Python学习日记(三十二) hmac检验客户端的合法性和socketsever模块

    Hmac模块 其实这个模块类似hashlib模块,它能将一些重要的信息通过算法加密成密文,让信息更具有安全性. 关于hmac加密算法的了解:它的全名是哈希运算消息认证码(Hash-based Mess ...

  2. socketserver和socket的补充(验证客户端合法性)

    一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系 ...

  3. Python之路(第三十四篇) 网络编程:验证客户端合法性

    一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客 ...

  4. day 26 初识进程,验证客户端合法性

    验证客户端合法性: # 1.需要认证 # 程序和用户打交道的时候才会用到用户认证 # 对所有的客户端进行统一的认证 # 我现在要做的事情 # 写一个server端 # 写一个client端 特殊的 符 ...

  5. C#检验参数合法性公用方法

    #region 检验参数合法性,数值类型不小于0,引用类型不能为null,否则抛出异常 /// <summary> /// 检验参数合法性,数值类型不小于0,引用类型不能为null,否则抛 ...

  6. 检验金额合法性, 只能是正数 或小数(常用js总结)

    //检验金额合法性 只能是正数 或小数 function checkMoney(fileds){ $(fileds).keyup(function () { ,}/); var txt = ''; i ...

  7. 用hmac验证客户端的合法性

    服务器端程序 import os import hmac import socket def auth(conn): secret_key = b'rock' rand_b = os.urandom( ...

  8. hmac_检验客户端是否合法

    老师博客:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label6 server端 import socket import os impo ...

  9. python之路----验证客户端合法性

    验证客户端链接的合法性 import os import hmac import socket secret_key = b'egg' sk = socket.socket() sk.bind(('1 ...

随机推荐

  1. docker的常用操作之二:docker内无法解析dns之firewalld设置等

    一,如何启动一个已退出的容器? [root@localhost ~]# docker start storage4 说明:架构森林是一个专注架构的博客,地址:https://www.cnblogs.c ...

  2. centos8上使用lsblk查看块设备

    一,查看lsblk命令所属的rpm包 [root@yjweb ~]# whereis lsblk lsblk: /usr/bin/lsblk /usr/share/man/man8/lsblk.8.g ...

  3. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  4. WebSocket的理解

    Websocket相对于无状态的HTTp协议,是在一次成功连接之后,在关闭请求之前,服务器和客户端能顺利进行信息传输.而不用像HTTP那样每一次都要告诉服务器这个请求者是谁(身份鉴别信息). 在HTT ...

  5. 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp

    洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...

  6. 两个有序数列找第k小

    给定一个数组,数组中的数据无序,在一个数组中找出其第k个最小的数,例如对于数组x,x = {3,2,1,4,5,6},则其第2个最小的数为2  两个有序数组 找第k小 * 方案一 合并遍历 * 二:游 ...

  7. 常用的Css函数

    1. attr() 用来选择元素的属性值,用法:attr(html元素的属性名),正常搭配css content一起使用 html: <p><a href="http:// ...

  8. springboot配置定时任务并发执行

    @Configuration public class ScheduleConfig implements SchedulingConfigurer { @Override public void c ...

  9. shell脚本之编程基础介绍

    1.shell脚本简介 1.1 shell是什么? shell是一个命令解释器,它在操作系统的最外层负责直接与用户对话,把用户的输入解释给操作系统:并处理各种各样的操作系统的输入,将结果输出到屏幕返回 ...

  10. Python爬虫练习(requests模块)

    Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...