先在客户端进行摘要,客户端把用户名作为盐。
然后在服务端进行二次摘要,用固定的盐(不能让别人知道你的盐是什么),然后存到文件中,密文存储。或者和文件中的密文对比。
这样即使在网络上用户信息被截获,和存在服务端文件中的用户密码密文也不同。
如果只能摘要一次(加密一次),就在服务端进行摘要。在客户端摘要,和明文一样,别人都能知道你的盐是什么。
用到的知识点:网络编程,socketserver模块,hashlib模块对密码进行加密,struct模块解决黏包问题
#userinfo文件
zhangsan|5701564ecae32e15698e774d993d6b2306028de0
lisi|099841fab9a5d7ef090eb725059b9b656efe25e5
#服务端代码:
import struct
import socketserver
import hashlib
class myserver(socketserver.baserequesthandler):
def handle(self):
conn = self.request
salt = '加盐了'.encode('utf-8')#在服务端设置固定的盐
while true:
try:
len = conn.recv(4)
name_len = struct.unpack('i',len)[0]
name = conn.recv(name_len).decode('utf-8')