一、使用socket通信
def client_communication(data):#通信
host = "127.0.0.1" #服务器IP地址
port = 12345 #服务器端口号
#处理发送数据
data = json.dumps(data)#将字典转换为json字符串
data = encryption_AES(data) #加密数据
try:
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))
client_socket.sendall(data.encode())
response = client_socket.recv(1024).decode()
#处理返回数据
ret = decode_AES(ret) #解密数据
ret=json.loads(ret)#将json字符串转换为字典
client_socket.close()
return response
except Exception as e:
return None
二、AES加密
def encryption_AES(data):#加密AES
key = get_random_bytes(16) # 随机生成16字节的密钥
aes = AES.new(key, AES.MODE_CBC) # 创建一个aes对象,使用CBC模式
iv = aes.iv # 初始化向量
text = pad(data.encode('utf-8'), AES.block_size) # 对数据进行填充
en_text = aes.encrypt(text) # 加密明文
combined_data = key + iv + en_text # 拼接密钥、iv和密文
ret = base64.b64encode(combined_data).decode('utf-8') # 编码为base64字符串
return ret
三、AES解密
def decode_AES(data):#解密
# 解密数据
combined_data = base64.b64decode(data) # 解码base64字符串
key = combined_data[:16] # 提取密钥
iv = combined_data[16:32] # 提取iv
en_text = combined_data[32:] # 提取密文
aes = AES.new(key, AES.MODE_CBC, iv) # 创建一个aes对象,使用CBC模式
den_text = unpad(aes.decrypt(en_text), AES.block_size) # 解密密文并去除填充
ret = den_text.decode('utf-8') # 解码为utf-8字符串
return ret
四、MD5加密
def encryption_HASH(data):#加密HASH
ret = hashlib.md5(data.encode()).hexdigest()#使用MD5加密
return ret
标签:AES,socket,Python,text,aes,ret,data
From: https://blog.csdn.net/weixin_52037378/article/details/141192043