客户合法性校验(密文hamc方法)

1.import os
    os.urandom(num) 随机出一个num位的随机bytes
    
2.import hamc
    md5_obj = hmac.new(盐,随机字符串)
    r = md5_obj.digest()
    拿到一个bytes的结果,也就是密文
    
补充:hashlib的加密
        # md5_obj = hashlib.md5(sor)
        # md5_obj.update(r_str.encode('utf-8'))
        # result = md5_obj.hexdigest()
        
        
        
#server层
import socket
import hashlib
import os
import hmac
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()

conn,addr = sk.accept()
#
sor = b'alex'
#随机字符串
r_str = os.urandom(16)# 随机出一个16位长度的bytes
#将随机字符串先发送到客户端client
conn.send(r_str)
#用hmac将盐和字符串加密成密文,结果是一个md5对象
md5_obj = hmac.new(sor,r_str)
#result此时是bytes类型,不需要进行编码解码等操作
result = md5_obj.digest()
#接受来自客户端的密文进行合法性判断
msg = conn.recv(1024)
if msg == result:
    #如果服务器端的密文和客户端发送过来的密文相匹配,则表示合法
    conn.send(b'success')
else:
    conn.send(b'failed')


conn.close()
sk.close()



#client层
import socket
import hmac
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
sor = b'alex'
#先接收来自服务器的随机字符串
r_str = sk.recv(1024)
#用hmac将盐和字符串加密成密文,结果是一个md5对象
md5_obj = hmac.new(sor,r_str)
#result此时是bytes类型,不需要进行编码解码等操作
result = md5_obj.digest()
#将密文发送给服务器端server进行客户端合法性校验
sk.send(result)
#接收服务器对客户端合法性的反应消息
msg = sk.recv(1024)
print(msg)
sk.close()



图片理解:

原文地址:https://www.cnblogs.com/god-for-speed/p/11719058.html