1. 程式人生 > >hmac檢驗客戶端合法性

hmac檢驗客戶端合法性

對象 cli 登陸認證 lose 隨機生成 hashlib 根據 server clas

  1.服務端

# 驗證客戶端是否合法
# 不依靠登陸認證


# 當有一個客戶端訪問你的時候,建立了tcp後,server端主動發起一個數據,數據為想加密的bytes類型的數據。
    # 客戶端拿到要加密的bytes類型的數據,

# import hmac     # 該模塊與hashlib類似
# import os
#
# h = hmac.new()  # secret_key 需要一個密鑰,與想要加密的bytes類型數據
# content = h.digest()  # 拿到一個密文內容
# hmac.compare_digest()   # 比較 ,密文與另外一個密文
# # print(os.urandom(32)) # 隨機生成32個字節 import socket import hmac # 該模塊與hashlib類似 import os def check_conn(conn): random_msg = os.urandom(32) # 得到一個隨機的32個字節 conn.send(random_msg) # 隨機發送32個字節 h = hmac.new(secret_key, random_msg) # 使用密鑰secret_key對發送出去的32個隨機字節進行加密得到一個hmac對象 digest = h.digest() #
由hmac對象得到一個密文 client_digest = conn.recv(1024) return hmac.compare_digest(digest, client_digest) # 比較自己對32個字節加密後得到的密文,與客戶端得到32個字節後加密得到的密文是否一樣 secret_key = begg # 密鑰 sk = socket.socket() sk.bind((127.0.0.1, 8090)) sk.listen() conn, addr = sk.accept() res = check_conn(conn) if res:
print(合法的客戶端) conn.send(bOK) else: print(不合法的客戶端) conn.send(bNO) conn.close() sk.close()

  

  客戶端

import socket
import hmac


secret_key = begg

sk = socket.socket()

sk.connect((127.0.0.1, 8090))

msg = sk.recv(1024)     # 得到的是的32個隨機字節

h = hmac.new(secret_key, msg)   # 根據與服務端協商好的secret_key,對收到的32個隨機字節進行加密,得到一個hmac對象

digest = h.digest() # 由hmac對象得到了32隨機字節與secret_key加密後的密文內容

sk.send(digest) # 將密文內容發送到服務端

print(sk.recv(1024).decode(utf-8))

sk.close()

hmac檢驗客戶端合法性