python验证客户端的合法性 -client:
from socket import *
import hmac,os
secret_key=b'pengliang'
def conn_auth(conn):
'''
验证客户端到服务器的链接
:param conn:
:return:
'''
msg=conn.recv(1)
h=hmac.new(secret_key,msg)
digest=h.digest()
conn.sendall(digest)
def client_handler(ip_port,bufsize=1024):
tcp_socket_client=socket(AF_INET,SOCK_STREAM)
tcp_socket_client.connect(ip_port)
conn_auth(tcp_socket_client)
while True:
data=input('>>: ').strip()
if not data:continue
if data == 'quit':break
tcp_socket_client.sendall(data.encode('utf-8'))
respone=tcp_socket_client.recv(bufsize)
print(respone.decode('utf-8'))
tcp_socket_client.close()
if __name__ == '__main__':
ip_port=('127.0.0.1',8041)
bufsize=1024
client_handler(ip_port,bufsize)
python验证客户端的合法性 -server:
from socket import *
import hmac,os
secret_key=b'pengliang'
def conn_auth(conn):
'''
认证客户端链接
:param conn:
:return:
'''
print('开始验证新链接的合法性')
msg=os.urandom(1)
conn.sendall(msg)
h=hmac.new(secret_key,msg)
digest=h.digest()
respone=conn.recv(len(digest))
return hmac.compare_digest(respone,digest)
def data_handler(conn,buffer_size=1024): # 处理通信循环
if not conn_auth(conn):
print('该链接不合法,关闭')
conn.close()
return
print('连接合法,开始通信')
while True:
data=conn.recv(buffer_size)
if not data:break
conn.sendall(data.upper())
def server_handler(ip_port,bufsize,backlog=5): # 处理链接循环
'''
只处理链接
:param ip_port:
:return:
'''
tcp_socket_server=socket(AF_INET,SOCK_STREAM)
tcp_socket_server.bind(ip_port)
tcp_socket_server.listen(backlog)
while True:
conn,addr=tcp_socket_server.accept()
print('新连接[%s:%s]' %(addr[0],addr[1]))
data_handler(conn,bufsize)
if __name__ == '__main__':
ip_port=('127.0.0.1',8041)
bufsize=1024
server_handler(ip_port,bufsize)
本文介绍了一个使用Python实现的HMAC算法进行客户端-服务器双向验证的示例。通过发送随机消息并使用共享密钥计算消息认证码,确保了通信双方的合法性,提高了网络通信的安全性。
649

被折叠的 条评论
为什么被折叠?



