检测一下客户端是否合法,不依靠登录认证.这样即使知道服务端ip和端口,客户端也不能随便就连接服务端
实现机制是在服务端中设置了密钥,借用了hmac os 两个模块
import socket
import os #导入os模块
import hmac #导入hmac模块
sk=socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
secret_key=b'zzy123' #设置密钥
def check_conn(conn):
"""
验证客户端密钥
:param conn: 客户端连接conn
:return: True or Flase 验证客户端的密钥和服务端是否一致
"""
msg=os.urandom(32) #随机获取一个32位的bytes类型的字符串随机验证码
conn.send(msg) #把这个字符串随机验证码发给客户端
h=hmac.new(secret_key,msg) #对密钥和随机验证码进行hmac加密,类似于把密钥加盐,得到一个加密对象
digest=h.digest() #获取加盐密钥
clint_secret_key=conn.recv(1024) #接收客户端传来的密钥
return hmac.compare_digest(digest, clint_secret_key) #比较客户端的密钥和服务端是否一致
conn, addr = sk.accept() #建立socket连接
ret=check_conn(conn) #调用函数,得到返回值True or Flase
if ret: #如果是True,则是合法的客户端
print('合法的客户端')
sk.close()
else:
print('不合法的客户端')
sk.close()

serve

"""
总结:检测一下客户端是否合法
1:hmac 加密模块 功能和用法类似hashlip
2:h=hmac.new() 括号里放你想加密的内容secret_key等 得到的h加密对象
3:digest=h.digest() 得到最终的密钥digest
4:compare_digest() 对比密钥的内置函数,括号里放你要比较的两个密文
5:import os
os.urandom() 随机获取多少位的bytes类型的字符串
"""
import socket
import os
import hmac
sk=socket.socket()
secret_key=b'zzy123' #设置密钥
sk.connect(('127.0.0.1',8080))
ret=sk.recv(1024) #接收服务端发来的随机验证码
h=hmac.new(secret_key,ret) #把客户端发来的随机验证码和自己设置的密钥 用hmac加密
msg=h.digest() #获取加盐密钥
sk.send(msg) #把加盐密钥发给服务端
sk.close()

clint

python--hmac的更多相关文章

  1. Python——hmac

    该模块在Python中实现 RFC 2104 中规范的 HMAC 算法. 目录 一.HMAC 对象 1. HMAC.update() 2. HMAC.digest() 3. HMAC.hexdiges ...

  2. php hash_hmac 与python hmac 区别

    使用 HMAC 方法生成带有密钥的哈希值 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = fal ...

  3. python hmac解密

    import hmac def get_singa_true(timestamp): sha1 = hmac.new("d1b964811afb40118a12068ff74a12f4&qu ...

  4. python hmac 加密

    python2 :  key 是秘钥 类型为 str msg 要加密的文件 str digestmod 要加密的方式 python3: key 是秘钥 类型为 byte msg 要加密的文件 byte ...

  5. HMAC(Hash-based Message Authentication Code)实现原理

    1.HMAC 概念 HMAC(Hash-based Message Authentication Code)基于 hash 的消息验证码,是 安全通信中必要的组成部件. 主要是 防止消息被篡改,和对称 ...

  6. python 内置模块之hashlib、hmac、uuid

    一.hashlib md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的.但同一段消息通过摘要算法后得到的值是一样的,可一通过比对消息摘要验证数据的完整性. sha算法比MD5 ...

  7. Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  8. 【Python】 hash值计算 hashlib & hmac

    hashlib & hmac *不是很清楚能不能把这种hash值取样算法称之为加密,但是似乎好像也是这么说的哈(非科班出身的野路子就是没这种基本知识的) ■ 基本用法 hashlib支持MD5 ...

  9. python模块:hmac

    """HMAC (Keyed-Hashing for Message Authentication) Python module. Implements the HMAC ...

  10. Python之数据加密与解密及相关操作(hashlib、hmac、random、base64、pycrypto)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

随机推荐

  1. 【题解】Crossing River

    题目描述 几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间. 输入格式 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间. 输出格式 输出t行数据,每行1个数 ...

  2. Oracle上课学习笔记<1>

    简单的select查询语句 1.select查询语句基本语法 使用两个关键字: select 指定要查询的字段和内容 from 从哪张表中查询 语法:select 字段名 from 表名; 三种不同的 ...

  3. java虚拟机规范(se8)——java虚拟机结构(六)

    2.11 指令集简介 java虚拟机指令由一个字节的操作码,接着时0个或多个操作数组成,操作码描述了执行的操作,操作数提供了操作所需的参数或者数据.许多指令没有操作数只包含一个操作码. 如果忽略异常处 ...

  4. Python-数字类型补充

    Python第五节数字类型补充 数字类型转换 int(x) float(x) complex(x) complex(x, y) 数学常量 pi e PS 数字类型不允许改变 也就是说,当我们对数字类型 ...

  5. Hooks初探

    一.创建自己的HOOkS,并进行封装 二.创建自己的HOOkS,并进行封装

  6. LeetCode Array Easy 88. Merge Sorted Array

    Description Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted ar ...

  7. Aspose.Words转换为PDF的时候字体丢失的问题解决

    系统中明明有字体的,Word中显示也正常,就是转换为PDF以后不正常,字体丢失,被替换成了等线字体 好一番研究,终于找到原因 ,原因是Windows\Fonts下的文件,有些只是虚拟的路径,真正的字体 ...

  8. nodejs模块——fs模块 读取文件

    readFile读取文件 fs.readFile(filename,[option],callback) 方法读取文件. 参数说明: filename String 文件名 option Object ...

  9. vue css动画原理

    从隐藏到显现 从显现到隐藏 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  10. Android中的onWindowFocusChanged()方法详解

    Android中获取手机屏幕的高度和宽度,我们知道在onCreate方法中获取到的值都是为0的,有人说可以在onClick方法中获取值,这个也是个方法 ,但在onWindowFocusChanged方 ...