zoukankan      html  css  js  c++  java
  • 基与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实现简单的 安全性权限校验

     

  • 相关阅读:
    js操作cookies
    努力挣钱只是不希望我的爱情受到别人金钱的考验罢了
    ASP 删除字符串开始或/和末尾处指定字符(串)
    lhgdialog 窗体之间的传值
    vs2010教程开始
    打开某些网页时IE弹出安全警告
    flex 版本问题
    【jQuery插件】用于瀑布式布局(砖块)的插件jquery Masonry
    自动根据动态的intput计算值
    js日期格式“补零”
  • 原文地址:https://www.cnblogs.com/max404/p/11845030.html
Copyright © 2011-2022 走看看