老师博客:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label6

server端

import socket
import os
import hmac
server=socket.socket()
ip_port=('192.168.43.155',8888)
server.bind(ip_port)
server.listen()
client,addr=server.accept()
secret_key=bytes('lhy'.encode('utf-8'))
def checkout():
random=os.urandom(32)#返回的bytes类型
secret_info=hmac.new(secret_key,random)
server_secret = secret_info.digest()#返回的是bytes
client.send(random)
client_secret=client.recv(1024)
if client_secret==server_secret:
print('检验成功,合法的客户端')
check_out='true'
else:
print('不合法的客户端')
check_out='false'
client.send(bytes(check_out.encode('utf-8')))
checkout()

client端

import socket
import hmac
client=socket.socket()
ip_port=('192.168.43.155',8888)
client.connect(ip_port)
secret_key=bytes('lhy'.encode('utf-8'))
def checkout():
msg=client.recv(1024)
secret_msg=hmac.new(secret_key,msg)
client_secret=secret_msg.digest()
client.send(client_secret)
check_out=client.recv(1024).decode('utf-8')
if check_out=='true':
print('合法的客户端')
else:
print('不合法的客户端')
checkout()

这只是很简单的客户端的合法验证,只是小小的写了一下而已。值得注意的是os.urandom和digest返回的都是bytes类型的数据。所以发送的接受的时候都不需要encode

下面来看看hashlib的客户端的验证方式。

server端

import socket
import os
import hashlib
server=socket.socket()
ip_port=('192.168.43.155',8888)
server.bind(ip_port)
server.listen()
client,addr=server.accept()
secret_key=bytes('lhy'.encode('utf-8'))
def checkout():
random=os.urandom(32)#返回的bytes类型
secret_info=hashlib.md5(secret_key)
secret_info.update(random)
server_secret = secret_info.hexdigest()#返回的是bytes
client.send(random)
client_secret=client.recv(1024).decode('utf-8')
if client_secret==server_secret:
print('检验成功,合法的客户端')
check_out='true'
else:
print('不合法的客户端')
check_out='false'
client.send(bytes(check_out.encode('utf-8')))
checkout()

client端

import socket
import hashlib
client=socket.socket()
ip_port=('192.168.43.155',8888)
client.connect(ip_port)
secret_key=bytes('lhy'.encode('utf-8'))
def checkout():
msg=client.recv(1024)
secret_msg=hashlib.md5(secret_key)
secret_msg.update(msg)
client_secret=secret_msg.hexdigest().encode('utf-8')
client.send(client_secret)
check_out=client.recv(1024).decode('utf-8')
if check_out=='true':
print('合法的客户端')
else:
print('不合法的客户端')
checkout()

这代码几乎和hmac一模一样,注意的是hashlib必需hash的是bytes,返回的确实str的类型。而hmac无论hash还是返回的值都是bytes类型

hmac_检验客户端是否合法的更多相关文章

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

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

  2. hmac检验客户端合法性

    1.服务端 # 验证客户端是否合法 # 不依靠登陆认证 # 当有一个客户端访问你的时候,建立了tcp后,server端主动发起一个数据,数据为想加密的bytes类型的数据. # 客户端拿到要加密的by ...

  3. ecshop检验邮件是否合法

    <?php /** * 验证输入的邮件地址是否合法 * * @access public * @param string $email 需要验证的邮件地址 * * @return bool */ ...

  4. day31-hmac模块检测客户端是否合法

    #如果客户端知道服务端的ip地址和端口,就可以连接服务端,信息不安全. #使用os.urandam随机生成32位bytes,然后hmac加密之后再发送给客户端. #server: import soc ...

  5. JAVA正则-检验QQ是否合法

    /* * 0不能开头,全数字,位数5-10位 * 123456 */ public static void checkQQ(){ String QQ = " 123456 "; / ...

  6. socketv 验证客户端链接的合法性,socketserver

    补充: send()与sendall() 在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags ...

  7. Day 35 验证客户端的合法性+socketserver

    一 .getpeername和getsoketopt的用法 服务器端代码 import socket sk =socket.socket() sk.bind(('127.0.0.1',9000)) s ...

  8. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q66-Q68)

    Question 66 You are designing an application that will use a timer job that will run each night to s ...

  9. django-表单

    一.从Request对象中获取信息 1.URL相关的信息 属性/方法 说明 举例 request.path 除域名以外的请求路径,以正斜杠开头 "/hello/" request. ...

随机推荐

  1. Qt5模块简介

        原文链接:Qt5 模块简介 无意中看到这篇文章,虽然讲的不是经常用的东西,但是看了这篇文章之后,可以对qt有个大致的了解,能够清晰的知道自己想要什么,应该关注那一部分,学习了,相信以后会又很大 ...

  2. Eureka中的核心概念

    图片的链接出了一点小bug,导致图片不能正常访问,小伙伴们可以移步这里:https://mp.weixin.qq.com/s/kAqOTKUt_qPlxzI4aGS5Pw 本文是Spring Clou ...

  3. 从0打卡leetcode之day 5 ---两个排序数组的中位数

    前言 我靠,才坚持了四天,就差点不想坚持了.不行啊,我得把leetcode上的题给刷完,不然怕是不好进入bat的大门. 题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . ...

  4. (五)通过Python的select监控多个描述符实现并发连接

    概述 本文通过使用select改写之前的服务器程序通过监控多个套接字描述符来实现并发连接并加入了一些机制让程序更加健壮,不过我们所有的实验都是建立在单词发送数据不会超过1024字节,如果超过你需要做特 ...

  5. javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码

     乱码是一个经常出现的问题 请求中,参数传递的过程中也是经常出现乱码的问题 本文主要整理了请求乱码中的问题以及解决思路   先要理解一个概念前提: 编码就是把图形变成数值码所以说: 图形的字符  -- ...

  6. Redis Codis 部署安装

    背景 关于Redis的高可用除了只身的Sentinel和Cluster之外,还有一个用的比较多的是Codis,由于公司的Redis大部分都使用Codis,本文就针对Codis进行相关的安装部署进行说明 ...

  7. 【转】MVC HtmlHelper用法大全

    HtmlHelper用来在视图中呈现 HTML 控件. 以下列表显示了当前可用的一些 HTML 帮助器. 本主题演示所列出的带有星号 (*) 的帮助器. ActionLink - 链接到操作方法. B ...

  8. MySql如何查询JSON字段值的指定key的数据

    实例:SELECT param->'$.pay' as pay_type FROM game.roominfo; 其中:param是roominfo表的一个字段,当中存的是JSON字符串,pay ...

  9. C# 如何更改Word语言设置

    一般在创建或者打开一个Word文档时,如果没有进行过特殊设置的话,系统默认的输入语言的是英语输入,但是为适应不同的办公环境,我们其实是需要对文字嵌入的语言进行切换的,因此,本文将介绍如何使用免费版组件 ...

  10. PHP 脚本不报错

    场景 当运行PHP脚本,访问数组中不存在的key时,脚本不报错,如下: <?php $arr = [1,2,3]; // 不报错,返回null var_dump($arr['abc']); 解决 ...