老师博客: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. 【Maven】---Linux搭建Nexus3.X私服

    Linux搭建Nexus3.X私服 备注:linux版本: ubuntu 同时已经部署好JDK8环境 一.linux安装nexus 1.创建文件夹并进入该目录 cd /usr/local && ...

  2. 华为oj之求int型正整数在内存中存储时1的个数

    题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...

  3. golang子进程的启动和停止,mac与linux的区别

    今天接到一个任务是将原来运行在mac的应用移植到linux,原因当然是因为客户那边当前是linux环境,也不想再采购mac电脑. 通常来说,这个工作并不难,因为我选用的服务器端技术是c或者golang ...

  4. 《HelloGitHub月刊》第 07 期

    最近工作上的事比较多,<HelloGitHub>月刊第07期拖到月底才发. 本期月刊对logo和月刊的排版进行了优化,不知道大家的反馈如何,还望大家多多反馈,让<HelloGitHu ...

  5. Kafka基础简介

    kafka是一个分布式的,可分区的,可备份的日志提交服务,它使用独特的设计实现了一个消息系统的功能. 由于最近项目升级,需要将spring的事件机制转变为消息机制,针对后期考虑,选择了kafka作为消 ...

  6. Chapter 4 Invitations——19

    After I hung up, I tried to concentrate on dinner — dicing the chicken especially; I didn't want to ...

  7. spring boot 统一异常处理

    需求源自于任何一个业务的编写总会有各种各样的条件判断,需要时时手动抛出异常,又希望让接口返回友好的错误信息. spring boot提供的帮助是自动将异常重定向到路由为/error的控制器 但是我们又 ...

  8. 基于Dockerfile镜像制作的基本操作

    一.使用Dockerfile制作镜像 前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像, ...

  9. QSS的使用(二)——实现ColorLabel

    在上一篇文章中,我们已经了解了QSS的基础使用,现在我们将会看到一个简单的例子来加深对QSS的理解. 需求分析 我们想要在界面中让文本显示出指定的颜色,现在有几种方案: 使用paintEvent手动计 ...

  10. JQuery官方学习资料(译):Data方法

        你可能经常会想需要通过元素来存储一些数据.在JavaScript中你可能需要给元素添加属性来实现这样的功能,但是在某些浏览器中,你可能还需要处理因此造成的内存泄露问题.JQuery提供了一个简 ...