首页 > 编程语言 >Python使用socket传输对数据AES和MD5加密

Python使用socket传输对数据AES和MD5加密

时间:2024-09-03 15:22:22浏览次数:6  
标签:AES socket Python text aes ret data

一、使用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

相关文章