# ### 服务器 import socket import hmac import os def auth(conn,secret_key): # 随机的32位二进制字节流 res = os.urandom(32) # 把res发送给对方的服务器 conn.send(res) # 用hmac加密字符串 hm = hmac.new(secret_key.encode(),res) # 通过hexdigest返回32长度的十六进制字符串 res_server = hm.hexdigest() print(res_server) # 接受客户端发过来的加密后的字符串 res_cli = conn.recv(1024).decode("utf-8") if res_server == res_cli: print("该用户是合法的链接请求") return True else: print("该用户是非法的链接请求") return False # 创建对象 sk = socket.socket() sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) sk.bind( ("127.0.0.1",9001) ) sk.listen() conn,addr = sk.accept() # 收发数据的逻辑 secret_key = "ig不牛逼" # 调用函数,验证权限 res = auth(conn,secret_key) # 如果验证的结果是真的,就处理用户发送过来的请求,假的直接断开链接 if res: print(conn.recv(1024).decode("utf-8")) conn.close() sk.close()
# ### 客户端 import socket import hmac def auth(sk,secret_key): # 收发数据的逻辑session msg = sk.recv(32) # 把key 和 msg 扔到new当中,进行加密 hm = hmac.new(secret_key.encode(),msg) # 通过hexdigest把加密后的结果返回出来 res_cli = hm.hexdigest() print(res_cli) # 把加密好的字符串在发送回原服务器 sk.send(res_cli.encode()) sk = socket.socket() sk.connect( ("127.0.0.1",9001) ) secret_key = "ig不牛逼" # 调用函数,验证权限 auth(sk,secret_key) # 向服务器发出下载的请求 sk.send(b"download") # 关闭链接 sk.close()
基与TCP实现简单的 安全性权限校验
原文:https://www.cnblogs.com/max404/p/11845030.html