思路:
服务端
import os
import hashlib
import socket
miyao=‘qwertyuiop‘
sk=socket.socket()
sk.bind((‘127.0.0.1‘,1235))
sk.listen()
while True:
conn,addr=sk.accept()
ret = os.urandom(16) #生成随机数
conn.send(ret) #传输随机数
sha = hashlib.sha1(miyao.encode(‘utf-8‘)) #加盐
sha.update(ret)
s = sha.hexdigest() #加密
msg=conn.recv(1024).decode(‘utf-8‘)
if s==msg: #判断加密后的字符串是否一致
conn.send(‘建立连接‘.encode(‘utf-8‘))
while True:
s=conn.recv(1024).decode(‘utf-8‘)
if s.upper()==‘Q‘:break
print(s)
conn.close()
else:
conn.close()
客户端
import os
import hashlib
import socket
miyao=‘qwertyuiop‘
sk=socket.socket()
sk.connect((‘127.0.0.1‘,1235))
ret=sk.recv(16)
sha=hashlib.sha1(miyao.encode(‘utf-8‘))
sha.update(ret)
s=sha.hexdigest()
print(s)
sk.send(s.encode(‘utf-8‘))
s=sk.recv(1024).decode(‘utf-8‘)
print(s)
while True:
msg=input(‘请输入信息:‘)
sk.send(msg.encode(‘utf-8‘))
if msg.upper()==‘Q‘:break
sk.close()
hmac 可以代替hashlib进行直接把密钥和字符串进行加密,直接生成bytes格式进行网络传输
使用方法
import hmac
import os
h=hmac.new(b‘qwer‘,os.urandom(16))
s=h.digest()
print(s)
得:b‘\xc0\xff\x8d\xd4\\(W\xba\xd9\n\xcfy\x0eR\xdb0‘
服务端
import os
import socket
miyao=b‘qwertyuiop‘
import hmac
sk=socket.socket()
sk.bind((‘127.0.0.1‘,1235))
sk.listen()
while True:
conn,addr=sk.accept()
ret = os.urandom(16) #生成随机数
conn.send(ret) #传输随机数
h=hmac.new(miyao,ret)
s=h.digest()
msg=conn.recv(1024)
if s==msg: #判断加密后的字符串是否一致
conn.send(‘建立连接‘.encode(‘utf-8‘))
while True:
s=conn.recv(1024).decode(‘utf-8‘)
if s.upper()==‘Q‘:break
print(s)
conn.close()
else:
conn.close()
客户端
import hmac
import socket
miyao=b‘qwertyuiop‘
sk=socket.socket()
sk.connect((‘127.0.0.1‘,1235))
ret=sk.recv(16)
h=hmac.new(miyao,ret)
s=h.digest()
sk.send(s)
s=sk.recv(1024).decode(‘utf-8‘)
print(s)
while True:
msg=input(‘请输入信息:‘)
sk.send(msg.encode(‘utf-8‘))
if msg.upper()==‘Q‘:break
sk.close()
原文:https://www.cnblogs.com/xiaoxiannvdbky/p/14866535.html