使用HMAC的客户端认证流程:
1. 客户端向服务器发起连接。
2. 服务器发送一个随机数消息,保留在session中。
3. 客户端得到随机数,通过将随机数(B) + 认证信息(K) 通过HASH算法计算出摘要信息,并通过对称加密算法进行加密。
4. 客户端将密文数据传递给服务器。
5. 服务器通过对称加密解密。
6. 服务器通过自己存储的认证信息+session中的随机数,以及相同的HASH算法重新计算摘要值,如果相同则认为客户端身份合法。
import os import hmac import socket secret_key = b'egg' sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() def check_conn(conn): msg = os.urandom(32) conn.send(msg) h = hmac.new(secret_key,msg) digest = h.digest() client_digest = conn.recv(1024) return hmac.compare_digest(digest,client_digest) conn,addr = sk.accept() res = check_conn(conn) if res: print('合法') conn.close() else: print('不合法') conn.close() sk.close()
import socket secret_key = b'egg' sk = socket.socket() sk.connect(('127.0.0.1',8080)) msg = sk.recv(1024) h = hmac.new(secret_key,msg) digest = h.digest() sk.send(digest) sk.close()