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()