我的python聊天了解套接字是有效的,今天我开始实现加密模块进行加密聊天。但我认为我搞乱公钥和私钥。
当客户端连接到服务器时,他们会进行握手以交换其公钥。因此,客户端有自己的密钥来解密加上服务器公钥来加密外发消息。服务器端:每个客户端都是一个线程,握手后存储自己的公钥来加密外发消息和服务器密钥进行解密。
工作流程(来自我的POV):发件人客户端加密邮件,发送到服务器,服务器使用自己的私钥进行解密,服务器使用自己的pubkey将邮件加密到所有其他客户端。最后,收件人客户端使用服务器pubkey解密该消息。
使用send_all
和send_all_no_room
方法向所有人发送消息时遇到的问题。有时消息被正确解密,但大多数时候没有正确解密。
在哪一点上我丢失了正确的密钥?
此处有server,client和comms(发送,接收方式)
考虑到我只对send_all
和send_all_no_room
函数实施了自定义发送,接收,加密,解密方法。例如,send_private_msg
将不起作用。
答案 0 :(得分:1)
问题出在send_all
函数:
def send_all(self, message):
"""Send to all method, broadcast a message"""
for sock in [client.sock for client in clients]:
if sock != self.sock:
message_encripted = self.encriptar(message,client)
send(sock,message_encripted)
for
循环的每次迭代都使用相同的client
。 send_all_no_room
函数中存在同样的问题。
固定代码:
def send_all(self, message):
"""Send to all method, broadcast a message"""
for client in clients:
if client is not self:
message_encripted = self.encriptar(message,client)
send(client.sock,message_encripted)