2017-06-05 5 views
0

Mein Python-Chat, um etwas über Sockets zu lernen, funktioniert und heute begann ich, das Crypto-Modul zu implementieren, um einen verschlüsselten Chat zu erstellen. Aber ich denke, ich mache mit öffentlichen und privaten Schlüsseln zu tun.Python-Chat mit Crypto-Modul nicht entschlüsseln

Wenn ein Client eine Verbindung mit dem Server herstellt, führen sie einen Handshake aus, um ihre öffentlichen Schlüssel auszutauschen. Daher verfügt der Client über eigene Schlüssel zum Entschlüsseln sowie über den öffentlichen Serverschlüssel, um ausgehende Nachrichten zu verschlüsseln. Und serverseitig: Jeder Client ist ein Thread und speichert nach dem Handshake seinen eigenen öffentlichen Schlüssel, um ausgehende Nachrichten und Serverschlüssel zu entschlüsseln.

Workflow ist (von meinem POV): Absender Client verschlüsselt eine Nachricht, wird an Server gesendet, Server entschlüsselt mit seinem eigenen privkey, Server verschlüsselt die Nachricht an alle anderen Clients mit ihren eigenen Pubkey. Schließlich entschlüsselt der Empfänger-Client die Nachricht mit dem Server-Pubkey.

Das Problem, das ich beim Senden von Nachrichten an alle konfrontiert bin, mit send_all und send_all_no_room Methoden. Manchmal wird die Nachricht korrekt entschlüsselt, aber die meisten Male wird nicht korrekt entschlüsselt.

In welchem ​​Punkt verliere ich den richtigen Schlüssel?

Hier gibt es die server, client und comms (senden, empfangen Methoden)

Berücksichtigen Sie, dass ich benutzerdefinierte nur implementiert senden, empfangen, zu verschlüsseln, entschlüsseln Methoden send_all und send_all_no_room Funktionen. Zum Beispiel send_private_msg wird nicht funktionieren.

Antwort

1

Das Problem ist in der send_all Funktion:

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) 

Jede Iteration der Schleife for verwendet denselben client. Das gleiche Problem existiert in der send_all_no_room Funktion.

Festcode:

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) 
+0

Sah nicht, dass nach so vielen Änderungen kommen ... Danke :) – Pere

Verwandte Themen