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
原文地址:https://www.cnblogs.com/zzy-9318/p/8414303.html