zoukankan      html  css  js  c++  java
  • 网络编程笔记(4)——hmac模块:验证客户端的合法性

    内容详细

    • hmac-验证客户端的合法性

    内容目录

    hmac

    • 监测一下客户端是否合法

    • 不依靠登录认证

      import hmac
      hmac.new()      # secret_key,你想进行加密的bytes
      sercret = h.digest()    # 密文
      hmac.compare_digest()   # 对比 密文与另外一个密文
      
    • 检验客户端连接的可靠性-检查

      # Server端:
      import os
      import socket
      import hmac
      
      
      secret_key = b'egg'
      
      sk = socket.socket()
      sk.bind(('127.0.0.1',8080))
      sk.listen()
      
      def check_conn(conn):
          msg = os.urandom(32)
          conn.send(msg)
          h = hmac.new(secret_key,msg)
          digest = h.digest()
          client_digest = conn.recv(1024)
          return hmac.compare_digest(digest,client_digest)
      
      conn,addr = sk.accept()
      res = check_conn(conn)
      
      if res:
          print('合法的客户端')
          conn.close()
      else:
          print('不合法的客户端')
          conn.close()
      sk.close()
      
      # Client端:
      import socket
      import hmac
      
      secret_key = b'egg'
      sk = socket.socket()
      sk.connect(('127.0.0.1',8080))
      
      msg = sk.recv(1024)
      h = hmac.new(secret_key,msg)
      digest = h.digest()
      sk.send(digest)
      
      sk.close()
      
    • os.urandom -- 生成一个随机位数的二进制

      import os
      msg = os.urandom(32)
      print(msg)
      
      #b'xc0x1c.xa4xdaxd3xd4xefxe1`x8aPx05}x9cx9fx1fxa6]x97NU6xeaxc3x01nxd1x8fx1ex90x04'
      
    • socketserver模块--多线程

      # server端:
      import socketserver
      
      class MyServer(socketserver.BaseRequestHandler):  #必须继承socketserver.BaseRequestHandler这个类
          def handle(self):                             #必须有handle这个方法
              # print(self.request.recv(1024))       # self.request相当于conn
              while True:
                  msg = self.request.recv(1024).decode('utf-8')
                  if msg == 'q':
                      break
                  print(msg)
                  info = input('>>>>')
                  self.request.send(info.encode('utf-8'))
      if __name__ == '__main__':
          server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)
          # thread 线程
          server.serve_forever()
          
      # Client端:
      import socket
      
      sk = socket.socket()
      sk.connect(('127.0.0.1',8080))
      
      while True:
          msg = input('>>>:')
          if msg == 'q':
              sk.send(b'q')
              break
          sk.send(msg.encode('utf-8'))
          ret = sk.recv(1024).decode('utf-8')
          print(ret)
      
      sk.close()
      
  • 相关阅读:
    leetcode—Swap Nodes in Pairs
    leetcode--Merge k Sorted Lists
    leetcode—Valid Parentheses
    leetcode—3sum
    编程工具(保持更新)
    QT下调用摄像头(opencv2.4.4)
    qtcreator 与 opencv
    在线公式编辑器
    QT学习(对话框)codeblock版本
    QT-opencv小结
  • 原文地址:https://www.cnblogs.com/lynlearnde/p/13471650.html
Copyright © 2011-2022 走看看