day31-hmac模塊檢測客戶端是否合法

#若是客戶端知道服務端的ip地址和端口,就能夠鏈接服務端,信息不安全。
#使用os.urandam隨機生成32位bytes,而後hmac加密以後再發送給客戶端。
#server:
import socket
import hmac
import os
secret_key = b'daxiong'
sk = socket.socket()
sk.bind(('127.0.0.1',9002))
sk.listen()
conn,addr =sk.accept()

def compare(conn):
    msg = os.urandom(32) #隨機32位bytes,每次都不同。
    conn.send(msg)       #把它當作驗證碼發出去
    h = hmac.new(secret_key,msg) #加密secret_key和驗證碼,獲得加密的對象
    digest = h.digest()  #獲得密文
    client_digest = conn.recv(1024) #接收client的密文
    return hmac.compare_digest(digest,client_digest) #對比密文和client的密文,並返回給compare(conn)
ret = compare(conn)

if ret:
    print('合法的客戶端')
else:
    print('非法客戶端')

conn.close()
sk.close()

#client:
import socket
import hmac
sk = socket.socket()
sk.connect(('127.0.0.1',9002))

secret_key = b'daxiong' #這個密鑰是約定好的。
msg = sk.recv(1024)     #接收32位的bytes
h = hmac.new(secret_key,msg)   #加密,獲得h對象。
digest = h.digest()            #密文
sk.send(digest)

sk.close()
相關文章
相關標籤/搜索