与Crypto模块进行Python聊天而不解密

时间:2017-06-05 10:31:28

标签: python encryption

我的python聊天了解套接字是有效的,今天我开始实现加密模块进行加密聊天。但我认为我搞乱公钥和私钥。

当客户端连接到服务器时,他们会进行握手以交换其公钥。因此,客户端有自己的密钥来解密加上服务器公钥来加密外发消息。服务器端:每个客户端都是一个线程,握手后存储自己的公钥来加密外发消息和服务器密钥进行解密。

工作流程(来自我的POV):发件人客户端加密邮件,发送到服务器,服务器使用自己的私钥进行解密,服务器使用自己的pubkey将邮件加密到所有其他客户端。最后,收件人客户端使用服务器pubkey解密该消息。

使用send_allsend_all_no_room方法向所有人发送消息时遇到的问题。有时消息被正确解密,但大多数时候没有正确解密。

在哪一点上我丢失了正确的密钥?

此处有serverclientcomms(发送,接收方式)

考虑到我只对send_allsend_all_no_room函数实施了自定义发送,接收,加密,解密方法。例如,send_private_msg将不起作用。

1 个答案:

答案 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循环的每次迭代都使用相同的clientsend_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)