1. 程式人生 > 程式設計 >python hmac模組驗證客戶端的合法性

python hmac模組驗證客戶端的合法性

hmac模組:

  比較兩個函式的金鑰是否一致:

import hmac
import os

msg = os.urandom(32)   #生成32位隨機位元組碼

def wdc():
  key = b'wdc'  #金鑰
  ret = hmac.new(key,msg)   #將位元組碼和key進行加密(必須都為bytes型別)建立一個物件ret
  digest = ret.digest()  #消化
  return digest  #返回消耗後的密文

def yhf():
  key1 = b'wdc'  #金鑰
  ret1 = hmac.new(key1,msg)  #將位元組碼和key1進行加密(必須都為bytes型別)建立一個物件ret1
  digest1 = ret1.digest()   #消化
  return digest1 #返回消耗後的密文

wdc = wdc()
yhf = yhf()
result = hmac.compare_digest(wdc,yhf)  #比較兩個密文是否一致,返回Fales/True
print(result)  #輸出結果

驗證客戶端合法性:

  服務端:

import os
import hmac
import socket
secret_key = b'wdc'   #金鑰:必須為二進位制編碼
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()

def check_conn(conn):
  msg = os.urandom(32)  #生成一個32位bytes型別隨機碼
  conn.send(msg) #傳送一個32位的隨機位元組碼
  h = hmac.new(secret_key,msg)   #將金鑰和生成的隨機位元組碼匹配加密生成一個物件
  digest = h.digest()   #消化生成密文
  client_digest = conn.recv(1024)   #接收訊息(客戶端生成的密文)
  return hmac.compare_digest(digest,client_digest)  #比較服務端和接收的客戶端的密文是否一致

conn,addr = sk.accept()
res = check_conn(conn)
if res:
  print('合法的客戶端')
  conn.close()
else:
  print('不合法的客戶端')
  conn.close()

sk.close()

  客戶端:

import hmac
import socket
secret_key = b'wdc'   #金鑰:必須為二進位制編碼
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
msg = sk.recv(1024)   #接收資訊(接收生成的32位位元組碼)
h = hmac.new(secret_key,msg)  #將金鑰和生成的隨機位元組碼匹配加密生成一個物件
digest = h.digest()   #消化生成密文
sk.send(digest)   #傳送生成的密文

sk.close()

以上就是python hmac模組驗證客戶端的合法性的詳細內容,更多關於python hmac模組的資料請關注我們其它相關文章!