一:使用 hashlib 进行加密验证:
# server.py 服务端
import os
import socket
import hashlib
​
def check_conn(conn):
    secret_key = b'alex_sb'                    # 用于加密的密钥
    rand_code = os.urandom(32)                 # 生成一个随机的32位的 bytes类型的随机数
    conn.send(rand_code)
    md5obj = hashlib.md5(secret_key)           # 使用md5加密
    md5obj.update(rand_code)                   # 加密随机数
    str_ret = md5obj.hexdigest()               # 取出结果
    str_msg = conn.recv(1024).decode('utf-8')  # 接收客户端发来的 消息
    if str_msg == str_ret:                     # 判断是不是相等。相等就是合法的客户端
        return True
    else:
        return False
​
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
​
conn,addr = sk.accept()
if check_conn(conn):
    conn.send('你是合法的连接'.encode())
    msg = conn.recv(1024)
    print(msg.decode())
conn.close()
# client.py 客户端
import socket
import hashlib
​
def check_conn(sk):
    secret_key = b'alex_sb'
    rand_code = sk.recv(32)
    md5obj = hashlib.md5(secret_key)
    md5obj.update(rand_code)
    str_ret = md5obj.hexdigest()
    sk.send(str_ret.encode('utf-8'))
​
sk = socket.socket()
​
sk.connect(('127.0.0.1',9000))
check_conn(sk)
# 以下部分你可以自由发挥
print(sk.recv(1024).decode())
sk.send('那么愉快的开始沟通吧'.encode('utf-8'))
sk.close()
二:使用 hmac 模块 进行加密
#server.py 服务端
import os
import socket
import hmac
​
def check_conn(conn):
    secret_key = b'alex_sb'
    rand_code = os.urandom(32)
    conn.send(rand_code)
    obj = hmac.new(secret_key,rand_code)      # 加密
    byte_ret = obj.digest()                   # 取结果
    byte_msg = conn.recv(1024)
    if byte_ret == byte_msg:
        return True
    else:
        return False
​
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
​
conn,addr = sk.accept()
if check_conn(conn):
    conn.send('你是合法的连接'.encode())
    msg = conn.recv(1024)
    print(msg.decode())
conn.close()
# client.py 客户端
import socket
import hmac
​
def check_conn(sk):
    secret_key = b'alex_sb'
    rand_code = sk.recv(32)
    obj = hmac.new(secret_key,rand_code)
    byte_ret = obj.digest()
    sk.send(byte_ret)
​
sk = socket.socket()
​
sk.connect(('127.0.0.1',9000))
check_conn(sk)
# 以下部分你可以自由发挥
print(sk.recv(1024).decode())
sk.send('那么愉快的开始沟通吧'.encode('utf-8'))
sk.close()
 
 

socket 客户端的认证的更多相关文章

  1. java版简易socket客户端

    android项目需要使用到心跳, 于是编写了一个简易的socket客户端程序 主要功能是给服务端发送心跳包,保持在线状态 没有使用框架,这样避免了需要引入包,直接使用的阻塞Socket通信. 主要逻 ...

  2. tomcat 配置客户端证书认证

    在完成配置客户端证书认证后,浏览器以https访问服务器的时候,会提示选择证书,之后,服务器端会验证证书.也就意味着只有拥有有效证书的客户端才能打开该网站. 以下是具体的配置过程. 1. 在服务器端生 ...

  3. 基于Socket客户端局域网或广域网内共享同一短信猫收发短信的开发解决方案

    可使同一网络(局域网或广域网)内众多客户端,共享一个短信猫设备短信服务器进行短信收发,短信服务器具备对客户端的管理功能. 下面是某市建设银行采用本短信二次开发平台时实施的系统方案图: 在该方案中,考虑 ...

  4. c++ socket 客户端库 socks5 客户端 RudeSocket™ Open Source C++ Socket Library

    介绍 一个c++ socket 客户端库 http://www.rudeserver.com/socket/index.html The RudeSocket™ Open Source C++ Soc ...

  5. Python socket 客户端和服务器端

    connection, address = socket.accept() 调 用accept方法时,socket会时入“waiting”状态.客户请求连接时,方法建立连接并返回服务器.accept方 ...

  6. 【RL-TCPnet网络教程】第20章 RL-TCPnet之BSD Socket客户端

    第20章      RL-TCPnet之BSD Socket客户端 本章节为大家讲解RL-TCPnet的BSD Socket,学习本章节前,务必要优先学习第18章的Socket基础知识.有了这些基础知 ...

  7. c# 创建socket客户端

    c# 创建socket客户端 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  8. socket 客户端和服务端通信

    客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址, ...

  9. socket模块实现基于UDP聊天模拟程序;socketserver模块实现服务端 socket客户端代码示例

    socket模块 serSocket.setblocking(False) 设置为非阻塞: #coding=utf-8 from socket import * import time # 用来存储所 ...

随机推荐

  1. strcpy函数使用方法以及底层实现

    strcpy(s1, s2);   strcpy函数的意思是:把字符串s2中的内容copy到s1中.连字符串结束标志也一起copy. 这样s1在内存中的存放为:ch\0; 在cout<<s ...

  2. 关系型数据库与HBase的数据储存方式差别

    现在Bigtable型(列族)数据库应用越来越广,功能也非常强大. 可是非常多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表.存储.查询. 本文以hbase举例讲述数据模式的变化. 传 ...

  3. hdu4849 Wow! Such City!(最短路dijkstra)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:pid=4849">http://acm.hdu.edu ...

  4. hdoj--1829--A Bug's Life(带权并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. kali 下使用 arpspoof 实现 ARP 欺骗

    ARP 欺骗: 一种中间人攻击,攻击者通过毒化受害者的 ARP 缓存,将网关的 MAC 替换成攻击者的 MAC ,于是攻击者的主机实际上就充当了受害主机的网关, 之后攻击者就可以截获受害者发出和接到的 ...

  6. ArrayList、Vector和LinkedList的区别

    ArrayList.Vector和LinkedList类均在java.util包下,均为可伸缩数组,即可以动态改变长度的数组 ArrayList和Vector都是基于存储元素的Object[] arr ...

  7. Mac OS X10.9安装的Python2.7升级Python3.4步骤详解

    Mac OS X10.9安装的Python2.7升级Python3.4步骤详解 Mac OS X10.9默认带了Python2.7,不过现在Python3.4.0出来了,如果想使用最新版本,赶紧升级下 ...

  8. 你必须知道的.net导航

    http://www.cnblogs.com/anytao/archive/2007/09/14/must_net_catalog.html

  9. wpf小玩意之关键字文本框

    有些时候,我们会碰到在输入文本时高亮一些文本关键字,譬如以下这图: 很明显,这个输入的文本中有四个关键字,正常文本都是黑色,关键字文本用了其他颜色.那么我们如何达到这种效果呢.wpf的textbloc ...

  10. 使用C#正则表达式获取必应每日图片地址

    微软的Bing搜索引擎首页每天都会提供了一些有趣的图片,下面使用正则表达式获取图片的地址,不管是在手机app还是在网站上都是很好的图片素材,而且每天更新,非常不错. 首先访问微软的API,该地址返回的 ...