验证客户端的合法性:

通常会用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()

posted @ 2018-08-01 15:28  青红*皂了个白  阅读(154)  评论(0编辑  收藏  举报