• tcp校验client客户端的合法性


    在某些情况下需要校验客户端的合法性,,   不是本程序的client 不能连接server  可以做下简单的校验合法性

    原理: 客户端和服务端有一个相同的key  后, 服务端将要发送信息msg发送给client 端, 对 msg  和key进行加密,  client 接收到msg  后也将msg 和key 进行加密后的client_digest发回给server端,  server对自己算的digest 和 client端的client_digest  进行对比 ,相同则是合法的客户端,否则不是

    可以利用内置模块 hmac 模块来进行加密校验  和  halib  差不多

    用到的方法有:

    创建hmac对象   h = hmac.new(key,msg)   key和msg  都必须为byets  类型的

    加密:  h.digest()

    对比结果: hmac.compare_digest(digest, client_digest)

    server端:

    import socket
    import hmac
    import os
    
    secret_key = b'key'
    
    sk = socket.socket()
    sk.bind(('127.0.0.1',6789))
    sk.listen()
    
    #对连接的客户端校验时候合法
    '''使用hmac  模块校验(内置模块)'''
    def check_conn(conn):
    	msg = os.urandom(32)
    	conn.send(msg)#随发送一个32位的字节数据,加密的bytes
    	h = hmac.new(secret_key,msg)
    	digest = h.digest()#加密后的digest
    	client_digest =conn.recv(1024)#接收client发过来的加密digest
    	ret = hmac.compare_digest(digest,client_digest)#对比接收到的client  的和server是否一致
    	return ret
    
    conn, addr = sk.accept()
    res = check_conn(conn)
    if res:
    	print('合法的客户端')
    	conn.close()
    else:
    	print('bu合法的客户端')
    	conn.close()
    sk.close()
    

     

    client端:

    import socket
    import hmac
    
    secret_key = b'key111'
    
    sk =socket.socket()
    sk.connect(('127.0.0.1',6789))
    
    msg = sk.recv(1024)
    h = hmac.new(secret_key,msg)
    digest = h.digest()
    sk.send(digest)
    
    sk.close()
    

      

  • 相关阅读:
    BZOJ4975: [Lydsy1708月赛]区间翻转( 博弈&逆序对)
    BZOJ4550: 小奇的博弈(NIMK博弈& 组合数& DP)
    BZOJ5301: [Cqoi2018]异或序列(莫队)
    BZOJ5450: 轰炸(水题,Tarjan缩点求最长路)
    BZOJ5125: [Lydsy1712月赛]小Q的书架(DP决策单调性)
    codevs 2495 水叮当的舞步
    bzoj 1086: [SCOI2005]王室联邦
    bzoj 3720: Gty的妹子树
    bzoj 1024: [SCOI2009]生日快乐
    bzoj 1085: [SCOI2005]骑士精神
  • 原文地址:https://www.cnblogs.com/taysem/p/12706279.html
Copyright © 2020-2023  润新知