我正在尝试使用 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 发送时,出现了问题。