一:使用 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. 【cl】找不到火狐Cannot find firefox binary in PATH

    org.openqa.selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is ins ...

  2. Memcache 和 Radis 比较

    Memcache 和 Radis 比较 2014-03-28 11:00 2447人阅读 评论(0) 收藏 举报  分类: memcache(6)  Redis(7)  版权声明:本文为博主原创文章, ...

  3. UVA11234 Expressions

    题目的意思实在是读不懂,又是把栈变成队列什么的.. 只是大体的意思就是把后缀表达式变一下.. 抛开意思,事实上就是依据输入建个树,然后倒序输出.. 拿第一个例子说明:大写代表操作符(+ - × /之类 ...

  4. 2016.04.18,英语,《Vocabulary Builder》Unit 15

    term/termin, comes from the Latin verb terminare, 'to limit, bound, or set limits to', or the relate ...

  5. adbd cannot run as root in production builds的解决方法

    部分手机root后,使用adb root会出现这个提示. 原因是root不彻底. adb shell之后进入到$界面,su一下才进入到#. 这个之后可以使用root功能了. 注意到,这个时候exit的 ...

  6. linux下图片转换工具[【转】

    本文转载自:https://linux.cn/article-8014-1.html 计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务的方法.这篇教程里,我们会使用 Linux 命令行 ...

  7. bzoj5029: 贴小广告&&bzoj5168: [HAOI2014]贴海报

    以后做双精题请至少先跑个数据...输入都不一样... 做法就是离散化大力线段树. 记得在x+1和y-1插点 看这个数据: 1000 121 10050 8080 9950 981 56100 2002 ...

  8. AdaBoostClassifier实战

    AdaBoostClassifier实战 部分内容摘自:http://blog.csdn.net/sun_shengyun/article/details/54289955 这里我们用一个具体的例子来 ...

  9. poj 3259-- Wormholes(SPFA)

                                                                                                         ...

  10. [ASPX] 模版引擎XTemplate与代码生成器XCoder(源码)

    模版引擎XTemplate是一个仿T4设计的引擎,功能上基本与T4一致(模版语法上完全兼容T4,模版头指令部分兼容). 自己设计模版引擎,就是为了代码生成器.网站模版.邮件模版等多种场合,也就是要能拿 ...