zoukankan      html  css  js  c++  java
  • python--hmac

    检测一下客户端是否合法,不依靠登录认证.这样即使知道服务端ip和端口,客户端也不能随便就连接服务端
    实现机制是在服务端中设置了密钥,借用了hmac os 两个模块
    import socket
    import os     #导入os模块
    import hmac     #导入hmac模块
    sk=socket.socket()
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    secret_key=b'zzy123'       #设置密钥
    def check_conn(conn):
        """
        验证客户端密钥
        :param conn: 客户端连接conn
        :return: True or Flase  验证客户端的密钥和服务端是否一致
        """
        msg=os.urandom(32)    #随机获取一个32位的bytes类型的字符串随机验证码
        conn.send(msg)          #把这个字符串随机验证码发给客户端
        h=hmac.new(secret_key,msg)       #对密钥和随机验证码进行hmac加密,类似于把密钥加盐,得到一个加密对象
        digest=h.digest()          #获取加盐密钥
        clint_secret_key=conn.recv(1024) #接收客户端传来的密钥
        return hmac.compare_digest(digest, clint_secret_key) #比较客户端的密钥和服务端是否一致
    conn, addr = sk.accept() #建立socket连接
    ret=check_conn(conn)   #调用函数,得到返回值True or Flase
    if ret:   #如果是True,则是合法的客户端
        print('合法的客户端')
        sk.close()
    else:
        print('不合法的客户端')
        sk.close()
    serve
    """
    总结:检测一下客户端是否合法
    1:hmac  加密模块 功能和用法类似hashlip
    2:h=hmac.new()  括号里放你想加密的内容secret_key等  得到的h加密对象
    3:digest=h.digest()  得到最终的密钥digest
    4:compare_digest()  对比密钥的内置函数,括号里放你要比较的两个密文
    5:import os
    os.urandom() 随机获取多少位的bytes类型的字符串
    """
    import socket
    import os
    import hmac
    sk=socket.socket()
    secret_key=b'zzy123'  #设置密钥
    sk.connect(('127.0.0.1',8080))
    ret=sk.recv(1024) #接收服务端发来的随机验证码
    h=hmac.new(secret_key,ret)  #把客户端发来的随机验证码和自己设置的密钥 用hmac加密
    msg=h.digest()   #获取加盐密钥
    sk.send(msg)   #把加盐密钥发给服务端
    sk.close()
    clint
  • 相关阅读:
    BFS 简单思想以及代码
    01、Hibernate安装配置
    WireShark——ARP 协议包分析
    eNSP之VLAN设计实验
    eNSP 交换机 路由器 PC 互连设计/实现
    Windows常用的网络命令
    01、Git安装教程(windows)
    Java IO编程——文件拷贝
    Java 多线程编程——多线程
    Java IO编程——转换流
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/8414303.html
Copyright © 2011-2022 走看看