socket 客户端的认证
一:使用 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()