一*混列模块
1 .聪明的雨算法聪明的雨函数又称散列函数,将数据转换成一系列数字
对同一数据同时运行同一数据的聪明雨的结果是相同的
对于所有相同的值,聪明的雨的结果是一样的
聪明的雨不变型数字字符串
不聪明的可变雨类型词典元组列表
词典的key键不变且唯一的*聪明的雨*,value值可变*不聪明的雨*
set集合是去除重量的,也是散列函数
2.hashlib模块已加密
1 .加密,即摘要算法的使用方法import hashlib
md5行业最常见的算法32位十六进制
sha1算法40位十六进制
文件一致性
加密验证
基本摘要与库冲突
加盐是恶意注册
动态加盐-------用安全的username片修饰
2.hmac封装混存
HMAC(b'salt ',b'hello ',md5 ) )。
obj=hashlib.sha1 (
obj.digest(#字节串
3 .获取随机数
导入操作系统
print(OS.urandom(20 ) )
3 .登录案例
用户密码是hello
a.txt
4.MD5加盐验证文件完整性
二* hashlib的sha1算法
2 .确认客户端是否合法
server.py
client.py
3 .验证客户端是否合法后进行通话
server.py导入套接字
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 ) ) ) ) )。
打印(ret _ c )是
#加密接收到的内容
obj=hash lib.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 (客户端)、encode (编码)、utf-8 )发送信息
是ret=Conn.send(s )
是打印(ret )
msg=Conn.recv(1024 ).decode(utf-8 ) ) ) ) ) ) ) )。
是打印(msg )
else:
print )“连接了非法的客户端”
conn.close ()
sk.close ()。
client.py
三*验证合法后进行打包
1.server.py
#创建连接导入hmac
def mysocket () :
sk=socket.socket (
SK.bind () (127.0.0.1 )、8080 ) )
SK.Listen(3) )。
conn,addr=sk.accept (
返回连接,sk
#验证
EFAuth(Conn,sk ) :
salt=b'hello '
str=OS.urandom(20 ) )。
Conn.send(str )发送字节串
MD5_s=Conn.recv(1024 )接收来自客户端的MD5_s
#以下为混列模块
#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:
打印(违法! ' )
conn.close ()
sk.close ()。
#通信函数
defcom(:
while True:
s=input ('向客户端发送消息() ).encode ) (utf-8 ) ) ) ) )。
是Conn.send(s )
msg=Conn.recv(1024 ).decode(utf-8 ) ) ) ) ) ) ) )。
是打印(msg )
if __name__=='__main__':
conn,sk=mysocket ()
自动(连接,sk ) )。
cient.pyimport hmac
def mysocket () :
sk=socket.socket (
sk.connect((127.0.0.1 )、8080 ) )
返回sk
EFAuth(sk ) :
salt=b'hello '
bytes=sk.recv(1024 )接收字符串
#以下为混列模块
#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 ()。
defcom(:
while True:
msg=sk.recv(1024 ).decode () utf-8 () )。
是打印(msg )
s=input ('向服务器发送消息() ).encode ) (utf-8 ) ) ) ) )。
sk.send(s )。
if __name__=='__main__':
sk=mysocket ()
是自动(sk )