关于 python 中使用套接字加密的问题

A Question about Encryption in python with sockets

我有一个基本的服务器和一个客户端设置

我如何:

如果我使用 python 提供的标准库进行 AES 加密。我是否必须已经对两种代码中的加密密钥进行“硬编码”,或者是否有一种方法可以在不进行“硬编码”的情况下随机刷新密钥并在两侧保持相同?如果是,如何?

因为在另一个线程中 Sending Encrypted strings using socket in Python 他们已经在连接的两端提供了加密密钥...

SERVER.py:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("IP", 1234))
s.listen(5)

while True:
    clientsocket, address = s.accept()
    print(f"Connection from {address} established!")
    clientsocket.send(bytes("Hello World!", "utf-8"))

CLIENT.py:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("IP", 1234))
msg = s.recv(1024)
print(msg.decode("utf-8"))

AES 只是关于使用固定密钥的加密,而不是关于密钥管理。根据您的示例,看起来您实际上想要保护两方之间基于套接字的通信。请为此使用 TLS - 它是为此目的而建立的良好协议(HTTPS 的基础),它关心身份验证、加密、密钥管理,...

强烈建议使用此类已建立的解决方案,而不是构建自己的解决方案,因为后者很容易出错。例如,您引用的线程在不提供任何完整性的普通 CBC 模式下使用 AES。这意味着中间人攻击者可以在通信对等方无法检测到此类修改的情况下更改加密数据。默认情况下,TLS 会妥善处理所有这些问题。