1、驗證客戶端的合法性
登錄:只要有個性化設計的時候就需要登錄
登錄和合法性驗證二選一,如果做登錄的功能就不需要做合法性驗證
server
import os
import socket
import hashlib
SECRET_KEY = b'yongliang' # 設定秘鑰
def check_client(conn):
randbytes = os.urandom(32) # 隨機產生一個32位的隨機位元組
conn.send(randbytes) # 將隨機位元組發送給client
# 服務端對隨機位元組進行hashlib動態加鹽(秘鑰)加密
md5 = hashlib.md5(SECRET_KEY)
md5.update(randbytes)
code = md5.hexdigest()
code_cli = conn.recv(32).decode('utf-8') # 接收client發來的加密后的字串
return code == code_cli # 進行客戶端驗證 回傳bool值
sk = socket.socket()
sk.bind(('127.0.0.1',9001))
sk.listen()
while True:
conn,addr = sk.accept()
if not check_client(conn):continue # 驗證判斷 如果得到False -->continue
print('行程正常的通信了') # 驗證通過 執行其他程式
client
import os
import socket
import hashlib
SECRET_KEY = b'yongliang'
def check_client():
randbytes = sk.recv(32) # 接收服務端發送的32位的隨機位元組
# 客戶端對隨機位元組進行hashlib動態加鹽(秘鑰)加密
md5 = hashlib.md5(SECRET_KEY)
md5.update(randbytes)
code = md5.hexdigest().encode('utf-8')
sk.send(code) # 將加密后的字串發送到server
sk = socket.socket()
sk.connect(('127.0.0.1',9001))
check_client()
print('正常的客戶端通信') # 驗證通過 則執行其他程式
明文進行加密時也可以用 hmac 模塊
import os
import hmac # 在加密內容基礎上增加鹽
SECRET_KEY = b'yongliang'
randbytes = os.urandom(32) # 隨機產生一個32位的位元組
mac = hmac.new(SECRET_KEY,randbytes) # 對隨機位元組進行動態加密
ret = mac.digest()
print(ret)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/222221.html
標籤:Python
