2017-06-05 16 views
0

私のPythonチャットがソケットについて学ぶために働いていて、今日私は暗号化チャットを行うためにCryptoモジュールを実装し始めました。しかし、私は公開鍵と秘密鍵を使いこなしていると思う。暗号モジュールとのPythonチャットの復号化がありません

クライアントがサーバーに接続すると、公開鍵を交換するためにハンドシェイクが行われます。そのため、クライアントには、自分の公開鍵を復号化して公開メッセージを暗号化するための鍵があります。そしてサーバー側:各クライアントはスレッドであり、ハンドシェイク後には、送信メッセージを暗号化するための独自の公開鍵と復号化するサーバーキーが格納されます。

ワークフローは(私のPOVから):送信者クライアントはメッセージを暗号化し、サーバーに送信し、サーバーは自身の秘密キーで復号化し、サーバーは自分のpubkeyを持つ他のすべてのクライアントにメッセージを暗号化します。最後に、受信者クライアントはserver pubkeyを使用してメッセージを復号化します。

send_allsend_all_no_roomの方法を使用して、すべてにメッセージを送信するときに直面する問題です。メッセージが正しく復号化されることもありますが、ほとんどの場合、正しく復号化されません。

正しいキーを紛失していますか?

はここ

は、私は、暗号化し、送信、受信のカスタム実装を考慮してくださいsend_allsend_all_no_room機能にメソッドを解読serverclient、およびcomms(受信、送信方法)があります。たとえば、send_private_msgは機能しません。

答えて

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

は非常に多くの編集後に来ていることがわかりませんでした...ありがとう:) – Pere