hmac的检验客户端合法性

server端

import socket
import os
import hmac

seret_key = b‘egg‘
sk = socket.socket()
sk.bind((‘127.0.0.1‘,8080))
sk.listen()

def check_conn(conn):
    msg = os.urandom(32)
    conn.send(msg)
    h = hmac.new(seret_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()

client端

import socket
import hmac

seret_key = b‘egg‘
sk = socket.socket()
sk.connect((‘127.0.0.1‘,8080))
msg = sk.recv(1024)
h = hmac.new(seret_key,msg)
digest = h.digest()
sk.send(digest)

sk.close()

原文地址:https://www.cnblogs.com/kuraki/p/9575218.html

时间: 2024-11-14 12:45:22

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

网络编程- socket协议小结、hmac的检验客户端合法性和socketserver模块(十)

原文地址:https://www.cnblogs.com/mys6/p/10801448.html

hmac检验客户端合法性

1.服务端 # 验证客户端是否合法 # 不依靠登陆认证 # 当有一个客户端访问你的时候,建立了tcp后,server端主动发起一个数据,数据为想加密的bytes类型的数据. # 客户端拿到要加密的bytes类型的数据, # import hmac # 该模块与hashlib类似 # import os # # h = hmac.new() # secret_key 需要一个密钥,与想要加密的bytes类型数据 # content = h.digest() # 拿到一个密文内容 # hmac.co

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

一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系列应为AF_INET(默认值ipv4),AF_INET6(ipv6),AF_UNIX,AF_CAN或AF_RDS. (AF_UNIX 域实际上是使用本地 socket 文件来通信) type 套接字类型应为SOCK_STREAM(默认值,tcp协议),SOCK_DGRAM(udp协议),SOCK_R

SocketServer模块,hmac模块验证client合法性

hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 = h.digest() # hmac.compare_digest() #括号内传另外一个密文,看是否相等 h = hmac.new(b'secret',b'382835896') digest = h.digest() print(digest) #>>>> b'\xa4<

客户合法性校验(密文hamc方法)

1.import os os.urandom(num) 随机出一个num位的随机bytes 2.import hamc md5_obj = hmac.new(盐,随机字符串) r = md5_obj.digest() 拿到一个bytes的结果,也就是密文 补充:hashlib的加密 # md5_obj = hashlib.md5(sor) # md5_obj.update(r_str.encode('utf-8')) # result = md5_obj.hexdigest() #server层

SSH中文文档

SSH中文文档 SSH 一项创建在应用层和传输层基础上的安全协议,用于替代安全性差的TELNET,加密安全登陆用. SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用SSH协议可以有效防止远程管理过程中的信息泄露问题.通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗. SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度.SSH有很多功能,它既可以代替Telnet,又可以为FTP.POP.甚至为PPP提供一个安全的"通道"

【linux基础】16、软件包管理

一.软件包概述 1.相关概念 源码安装操作系统方式:通过宿主机安装 GPL:公布源码(c,c++) POSIX规范:Portable Operatin System (原代码)移植性 API:应用编程接口,兼容,意味开发库兼容,因此源代码可夸平台 ABI:应用二进制接口,兼容,编译后的程序可夸平台 库:就是函数\功能,可执行程序,本身不能作为程序执行的入口,但可以被调用 编译好的二进制格式 glibc:linux标准的C库 程序开发完成后要使用得经过的步骤: 预编译,编译,汇编,链接(把库文件链

Linux程序包管理

Linux程序包管理 RPM包基础 RPM YUM 编译安装 概述 Linux上的程序包管理,是我们的必备技能,本文将从三个视角:rpm.yum.源码编译来浅析Linux的程序包管理.首先,我们来看下本文的主要内容: - 程序包的命名- RPM: 程序包管理器    安装.卸载.升级.查询.校验.数据库维护      - YUM: RPM的前端程序    yum的配置文件     yum的常规操作:升级.检查.卸载.查看.包组管理     使用光盘当作本地yum仓库     yum的命令行选项及

分布式缓存系统 Memcached 状态机之网络数据读取与解析

整个状态机的基本流程如下图所示,后续分析将按该流程来进行. 接上节分解,主线程将接收的连接socket分发给了某工作线程,然后工作线程从任务队列中取出该连接socket的CQ_ITEM,开始处理该连接的所有业务逻辑.这个过程也就是上图中的第一个状态conn_listening. 而工作线程首先进入的状态就是conn_new_cmd,即为这个新的连接做一些准备工作,如清理该连接conn结构的读缓冲区等. 准备状态conn_new_cmd具体分析如下: {  <span style="font