检测一下客户端是否合法,不依靠登录认证.这样即使知道服务端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. [已解决]报错:have mixed types. Specify dtype option on import or set low_memory=False

    报错代码: import pandas as pd pd1 = pd.read_csv('D:/python34/program/wx_chat_single/qq_single.csv') 报错内容 ...

  2. Smokeping分享

    Somkeping master端搭建过程 服务端/master端 一. 搭好环境,安装依赖包(1)yum -y install httpd fping echoping curl  rrdtool ...

  3. Python建立Tab自动补全的脚本

    Python建立Tab自动补全的脚本 #!/usr/bin/python #python steup file import sys import readline import rlcomplete ...

  4. 【牛客网-剑指offer】旋转数组的最小数字

    题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  5. 消费kafka的消息,并将其SparkStreaming结果保存到mysql

    将数据保存到mysql,需要用到jdbc.为了提高保存速度,我写了一个连接池 1.保存到mysql的代码 package test05 import org.apache.log4j.{Level, ...

  6. 五分钟学GIS | 快速生成地图瓦片秘籍

    什么是地图瓦片? 地图瓦片是包含了一系列比例尺.一定地图范围内的地图切片文件.地图瓦片按照金字塔结构组织,每张瓦片都可通过级别.行列号唯一标记.在平移.缩放地图时,浏览器根据金字塔规则,计算出所需的瓦 ...

  7. DQN的第一次尝试 -- 软工结对编程第一次作业

    DQN的第一次尝试 在本篇博客中将为大家形象地介绍一下我对DQN的理解,以及我和我的队友如何利用DQN进行黄金点游戏.最后我会总结一下基于我在游戏中看到的结果,得到的dqn使用的注意事项和这次游戏中我 ...

  8. 2018-8-10-win10-uwp-json

    title author date CreateTime categories win10 uwp json lindexi 2018-08-10 19:16:53 +0800 2018-2-13 1 ...

  9. Java 简单链表实现

    1.初衷 最近在看Java基础,有一章节涉及到链表,便记之所学所得. 2.链表的定义 链表是存储地址不连续的线性存储结构 3.链表的基本结构 一个节点包含当前节点,与下个节点的引用 4.简单链表的实现 ...

  10. Linux上的VirtualBox如何使用USB

    问题: VirtualBox设置中已经启用了"USB2.0(EHCI)控制器"选项,但是虚拟机中始终没有USB设备,右下角的状态也显示没有连接任何USB设备,看起来像是Virtua ...