Я пытаюсь установить связь с сервером и клиентом с использованием 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 в строку, а затем в байт и отправляю через UDP, что-то пошло не так.