网络协议的最底层就是socket,基于socket模块,又封装了一层,就是socketserver,socketserver是为了实现server端tcp协议的并发
server端写法:
# 服务端
#导入socket模块
import socketserver
#建立一个类,继承BaseRequestHandler类
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print("成功调用handle方法")
#ThreadingTCPServer(IP端口号,自定义的类)
server = socketserver.ThreadingTCPServer(("127.0.0.1",9003),MyServer)
server.serve_forever()
客户端:
import socket
sk=socket.socket()
sk.connect(("127.0.0.1",9003))
#收发数据的逻辑
sk.close()
重复执行client端,可持续自动执行handle方法
服务端:
# 服务端
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
conn=self.request
while True:
# 接收数据
res=conn.recv(1024)
res1=res.decode()
print(res1)
conn.send(res1.upper().encode())
server=socketserver.ThreadingTCPServer(("127.0.0.1",9004),MyServer)
server.serve_forever()
客户端:
#客户端
import socket
sk=socket.socket()
sk.connect(("127.0.0.1",9004))
while True:
strvar="you can you up"
sk.send(strvar.encode())
res=sk.recv(1024)
print(res.decode())
sk.close()
hashlib这个模块是一堆加密算法的集合,哈希算法的加密方式不止一种,常用md5加密和hmac加密
https://www.cmd5.com/ md5解密网站,复杂密码无法解密
应用场景:在需要校验功能时使用
#导入hashlib模块
import hashlib
#用md5加密,并生成对象
hm=hashlib.md5()
#将要加密的字符串转为字节流传入hashlib进行处理
hm.update("123456".encode("utf-8"))
#获取32位16进制字符串
res=hm.hexdigest()
#打印加密后字符串
print(res)
加一个关键字配合原字符串进行加密,使密码更复杂,不容易被破解
import hashlib
hm=hashlib.md5("Xman".encode("utf-8"))
hm.update("123456".encode("utf-8"))
res=hm.hexdigest()
print(res)
由于密码复杂度高,出现了购买提示
通过随机数字给密码加盐,这次密码我们设置复杂一些
import hashlib
import random
res1=random.randrange(100000,1000000)
hm=hashlib.md5(str(res1).encode("utf-8"))
hm.update("8217wlsd".encode("utf-8"))
res2=hm.hexdigest()
print(res2)
由于密码更为复杂,网页已无法进行破解
动态加盐
# 导入hmac模块
import hmac
import os
#随机生成指定位数字节流
key=os.urandom(32)
msg=b"123456"
#hmac(盐,密码)
hn=hmac.new(key,msg)
res=hn.hexdigest()
print(res)
通过解密网站查看加密后字符串对应的字符
网页无法进行反解