UDP を使用してサーバー クライアント通信を行おうとしていますが、RC4 を使用して暗号化されたテキストを相互に送信する必要があります。次のようになります。
ホストを開始します。
クライアントを起動します。
クライアントは RC4 を使用して暗号化されたテキストを送信します
ホストは暗号化されたテキストを受信し、RC4 を使用して復号化します
私の RC4 はオンライン ソースから取得したもので、動作しているようです。クライアント側で(テスト目的で)暗号化と復号化の両方を行う場合、それは機能します。しかし、暗号化されたテキストをホストに送信した後に問題が発生します。ホストがメッセージを復号化すると、出力が期待どおりの出力ではありません。
クライアントでの私のコードの例を次に示します。
RC4 rc4 = new RC4(rc4Key);
String message = "Hello";
char[] result = rc4.encrypt(message.toCharArray());
System.out.println("encrypted string: " + new String(result)); //M®FW?
System.out.println("decrypted string: " + new String(rc4.decrypt(result))); //Hello
上記から、適切に暗号化および復号化できるように見えるため、RC4 が機能していると思います。暗号化されたテキストをホストに送信します
sentence = new String(result);
sendData = sentence.getBytes();
sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
ホスト側では、暗号化されたテキストを受け取ります
receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
realSentence = Arrays.copyOf(receivePacket.getData(), receivePacket.getLength());
sentence = new String(realSentence);
RC4 rc4 = new RC4(ad.toString());
char[] result = rc4.decrypt(sentence);
System.out.println("decrypted string: " + new String(result)); //H?ll?
これは半分の時間しか発生せず、暗号化されたテキストに?
特殊文字が含まれている場合にのみ発生するパターンが見られます。したがって、char を string に変換してから byte に変換し、UDP 経由で送信すると、何か問題が発生したと推測しています。