基与TCP实现简单的 安全性权限校验

Server

# ### 服务器
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()

Client

# ### 客户端
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实现简单的 安全性权限校验

 

猜你喜欢

转载自www.cnblogs.com/max404/p/11845030.html
今日推荐