一 * hashlib模块
1.哈希算法哈希函数 又称 散列函数 把数据转化为一串数字
对同一个数据在同一次运行同一个数据哈希结果相同
对每一个相同的值进行哈希结果是相同的
可哈希 不可变类型 数字字符串
不可哈希 可变类型 字典元组列表
字典的key键是不可变且唯一的*可哈希*,value值是可变的*不可哈希*
set集合是去重的也是散列函数
2.hashlib模块是加密的
1.加密也即摘要算法 用法import hashlib
md5 业界最常用的算法 32位16进制
sha1 算法 40位16进制
文件一致性作用
验证加密
基本的摘要会撞库
加盐是恶意注册
动态加盐 -------安全的 username切片进行修饰
2.hmac 对hash进行封装
hmac(b"salt",b"hello",md5)
obj=hashlib.sha1()
obj.digest() #字节串
3.获得随机数
import os
print(os.urandom(20))
3.登陆案例
用户密码是hello
a.txt
4.MD5加盐 验证文件一致性
二 * hashlib中的sha1算法
2.验证客户端是否合法
server.py
client.py
3.客户端验证合法之后进行通话
server.pyimport socket
import hashlib
sk=socket.socket()
sk.bind(("127.0.0.1",9090))
sk.listen(5)
conn,addr=sk.accept()
salt="hello"
str="来到医院"
ret_s=conn.send(str.encode("utf-8"))
ret_c=conn.recv(1024).decode("utf-8")
print(ret_c)
#对接收的内容进行加密
obj=hashlib.md5(salt.encode("utf-8"))
obj.update(str.encode("utf-8"))
str_obj=obj.hexdigest()
#将加密后的内容和加密之前的内容进行对比
if ret_c == str_obj:
print("合法的客户端允许链接")
while True:
s=input("发送消息给client>>>").encode("utf-8")
ret=conn.send(s)
print(ret)
msg=conn.recv(1024).decode("utf-8")
print(msg)
else:
print("不合法的客户端非法不连接")
conn.close()
sk.close()
client.py
三 * 验证合法之后进行封装
1.server.py
#创建连接import hmac
def mysocket():
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))
sk.listen(3)
conn, addr = sk.accept()
return conn,sk
#验证
def auth(conn,sk):
salt = b'hello'
str = os.urandom(20)
conn.send(str) # 发送字节串
md5_s = conn.recv(1024) # 接收客户端发来的MD5_s
#以下是hashlib模块
# obj = hashlib.md5(salt)
# obj.update(str)
# r_str = obj.hexdigest()
#以下是hmac模块
obj = hmac.new(salt,str)
r_str = obj.digest()
if md5_s == r_str:
print('合法的客户端,允许连接!')
com()
else:
print("非法!!!")
conn.close()
sk.close()
#通信函数
def com():
while True:
s = input("发送消息给client 》》》").encode('utf-8')
conn.send(s)
msg = conn.recv(1024).decode('utf-8')
print(msg)
if __name__ == '__main__':
conn,sk = mysocket()
auth(conn,sk)
cient.pyimport hmac
def mysocket():
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
return sk
def auth(sk):
salt = b'hello'
bytes = sk.recv(1024) # 接收字符串
#以下是hashlib模块
# obj = hashlib.md5(salt)
# obj.update(s)
# r_str = obj.hexdigest()
#以下是hmac模块
obj = hmac.new(salt, bytes)
r_str = obj.digest()
sk.send(r_str)
com()
sk.close()
def com():
while True:
msg = sk.recv(1024).decode('utf-8')
print(msg)
s = input("发送消息给server 》》》").encode('utf-8')
sk.send(s)
if __name__ == '__main__':
sk = mysocket()
auth(sk)