通常会用hmac模块,和hashlib中的加盐加密算法类似
服务器端提前和客户端约定好key ,然后可以用os模块里的urandom来生成一组随机的字节
把随机字节发送给客户端去加密处理 ,服务器加密处理后把得到的字节与客户端传过来的进行比较 相同为true则合法 不同则非法
实现代码:
服务端
1 import os 2 import hmac 3 sk=socket.socket() 4 sk.bind(('127.0.0.1',8080)) 5 sk.listen() 6 key=b'dog' 7 8 def check_conn(conn): 9 msg=os.urandom(32) 10 conn.send(msg) 11 h=hmac.new(key,msg) 12 digest=h.digest() 13 client_digest=conn.recv(1024) 14 ret=hmac.compare_digest(digest,client_digest) 15 return ret 16 17 conn,addr=sk.accept() 18 result=check_conn(conn) 19 if result: 20 print('合法的客户端') 21 else: 22 print('不合法的客户端') 23 conn.close() 24 25 sk.close()
客户端:
1 import hmac 2 sk=socket.socket() 3 key=b'cat' 4 sk.connect(('127.0.0.1',8080)) 5 msg=sk.recv(1024) 6 h=hmac.new(key,msg) 7 digest=h.digest() 8 print(digest) 9 sk.send(digest) 10 11 sk.close()