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
时间: 2024-11-08 21:30:57