验证客户端合法性:
# 1.需要认证
# 程序和用户打交道的时候才会用到用户认证
# 对所有的客户端进行统一的认证
# 我现在要做的事情
# 写一个server端
# 写一个client端 特殊的 符合我的server端要求的代码
# 1.client端不会被其他机器获取到
# 2.即使客户端的代码不在别人手上 有心人仍然可以非法的访问我们的程序
# hashlib
# 密钥
# 随机的字符串
# server 密钥 发送一个随机字符串,密钥为盐,对随机字符串进行摘要 得到一个字符串结果
# client 密钥 密钥为盐,对随机字符串进行摘要 得到一个字符串结果 将结果发送回server端
import os import hmac import socket def auth(conn): s_key = b'echo' rand_b = os.urandom(32) conn.send(rand_b) obj = hmac.new(s_key, rand_b) res1 = obj.digest() res2 = conn.recv(1024) cmp_res = hmac.compare_digest(res1, res2) return True sk = socket.socket() sk.bind(('127.0.0.1', 10010)) sk.listen() conn, addr = sk.accept() ret = auth(conn) if ret: print('合法连接') while True: msg = input('>>>.:') conn.send(msg.encode()) if msg =='q':break msg1 = conn.recv(1024).decode() print(msg1) conn.close() sk.close()
# 客户端 import hmac import socket def auth(sk): s_key = b'echo' rand_b = sk.recv(32) obj = hmac.new(s_key, rand_b) res2 = obj.digest() sk.send(res2) sk = socket.socket() sk.connect(('127.0.0.1', 10010)) auth(sk) while True: msg = sk.recv(1024).decode() print(msg) if msg == 'q':break msg1 = input('>>>>: ') sk.send(msg1.encode()) if msg1 == 'q': break sk.close()