そこで、セキュリティと暗号化に大きく依存するこの基本的なチャット アプリケーションを作成しました。すべてを連携させる際にいくつかの問題が発生しています。
私はすでにクライアントとサーバー間の接続を確立できましたが、チャットセッション全体を復号化するために使用する共通のパスワードを共有して、それらの 2 つだけが表示されるようにしたいと考えています。また、セキュリティを強化するために、パスワードがネットワーク経由で送信されることはありません。これが私の問題の始まりです。
クライアントとサーバーが接続するとすぐに、サーバーはユーザー指定のチャレンジを送信します。これは基本的に、クライアントが復号化して返送する必要がある文字列であり、サーバーは一致するかどうかを確認し、一致する場合は通信を継続します。 WiFi での WPA 暗号化によく似ています。
私の暗号化設定は AES で、文字列とキーがあり、すべてが暗号化されて Base64 にデコードされてから送信されます。復号化するときは明らかにプロセスが逆になります。サーバーは正常にすべてを送信できますが、クライアントは暗号化された文字列を適切に受信しても、復号化時に null を返します。私は基本的に、ユーザーの選択に応じてクライアントまたはサーバーとして機能する 1 つのクラスを持っています。
いくつかのコード/スタック トレースを次に示します。 サーバー出力:KCcOYuXTUD6SaXJQ4qIn7Q== helloworld
クライアント出力:KCcOYuXTUD6SaXJQ4qIn7Q== null
暗号化/復号化方法: http://pastebin.com/TtErYyz6
ソケットの書き込み/読み取り方法: http://pastebin.com/73QcQxva
クライアント側のスタックトレース: http://pastebin.com/NdexZdyV 注: 行ごとにデバッグする場合、ソケットの pastebin リンクで 27 のように停止するだけです。
解決策を得るのに十分な詳細が含まれていることを願っています:P助けてくれてありがとう、私はこのプロジェクトにかなり懸命に取り組んできました.来月プログラミングの学位を取得するとき
完全なコード: http://pastebin.com/xkunfX37