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. IE下文件上传, SCRIPT5: 拒绝访问 问题

    最近遇到一个比较奇葩的问题,某些ie浏览器在页面中上传文件时,无法上传.查看控制台报错: SCRIPT5: 拒绝访问. jquery-3.2.1.min.js, 行4 字符5725 .并且我的最新版I ...

  2. logstash-配置文件详解

      kafka  将 kafka topic 中的数据读取为事件   kafka{ bootstrap_servers=> "kafka01:9092,kafka02:9092,kaf ...

  3. js实现无缝连接轮播图(二)实现自定义属性,根据banner图片的数量动态生成小圆点

    <!-- 这个animate.js 必须写到 index.js的上面引入 --><script src="js/animate.js"></scrip ...

  4. 图的全部实现(邻接矩阵 邻接表 BFS DFS 最小生成树 最短路径等)

    1 /** 2 * C: Dijkstra算法获取最短路径(邻接矩阵) 3 * 6 */ 7 8 #include <stdio.h> 9 #include <stdlib.h> ...

  5. JAVA NIO 基础学习

    package com.hrd.netty.demo.jnio; import java.io.BufferedReader; import java.io.IOException; import j ...

  6. 世界碰撞算法原理和总结(sat gjk)

    序言 此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法.如有其它见解,可以跟作者商讨.(杨子剑,zijian_yang@yeah.net). 在一个世界中,有多个物体,物体可以 ...

  7. uni-app h5端跨域问题解决

    例如我现在的项目运行在 http://localhost:8080,而我有个接口是 https://service.picasso.adesk.com/v1/wallpaper/album,发起请求就 ...

  8. Netty源码解析 -- 服务端启动过程

    本文通过阅读Netty源码,解析Netty服务端启动过程. 源码分析基于Netty 4.1 Netty是一个高性能的网络通信框架,支持NIO,OIO等多种IO模式.通常,我们都是使用NIO模式,该系列 ...

  9. php socket通信的简单实现

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  10. yii中的andFilterWhere使用说明

    当 WHERE 条件来自于用户的输入时,你通常需要忽略用户输入的空值. 例如,在一个可以通过用户名或者邮箱搜索的表单当中,用户名或者邮箱 输入框没有输入任何东西,这种情况下你想要忽略掉对应的搜索条件, ...