#若是客戶端知道服務端的ip地址和端口,就能夠鏈接服務端,信息不安全。 #使用os.urandam隨機生成32位bytes,而後hmac加密以後再發送給客戶端。 #server: import socket import hmac import os secret_key = b'daxiong' sk = socket.socket() sk.bind(('127.0.0.1',9002)) sk.listen() conn,addr =sk.accept() def compare(conn): msg = os.urandom(32) #隨機32位bytes,每次都不同。 conn.send(msg) #把它當作驗證碼發出去 h = hmac.new(secret_key,msg) #加密secret_key和驗證碼,獲得加密的對象 digest = h.digest() #獲得密文 client_digest = conn.recv(1024) #接收client的密文 return hmac.compare_digest(digest,client_digest) #對比密文和client的密文,並返回給compare(conn) ret = compare(conn) if ret: print('合法的客戶端') else: print('非法客戶端') conn.close() sk.close() #client: import socket import hmac sk = socket.socket() sk.connect(('127.0.0.1',9002)) secret_key = b'daxiong' #這個密鑰是約定好的。 msg = sk.recv(1024) #接收32位的bytes h = hmac.new(secret_key,msg) #加密,獲得h對象。 digest = h.digest() #密文 sk.send(digest) sk.close()