我有一个客户端和服务器 java 应用程序,它们需要加密文本相互传递。我正在使用 XOR 加密来加密我想要的文本。
问题是 readline() 不接受已异或的字符串,并且仅当它以字节为单位时才接受。
所以我在客户端将我的纯文本(字符串)转换为字节数组,并尝试在服务器端转换回字符串。
可悲的是,我正在寻找的结果仍然是胡言乱语,而不是我寻求的明文。
有谁知道如何使字节数组变回原始字符串?还是有更好的方法通过 readline() 函数发送 XOR 加密文本?
在应用了 XOR 之类的东西之后,您最终会得到任意二进制数据——而不是编码字符串。
将任意二进制转换为文本的传统安全方法是使用base64 -不要试图从它创建一个新字符串。所以你的过程会是这样的:
那么当你需要解密时...
new String(data, utf8Charset)
以取回原始字符串。有各种 Java base64 库可用,例如Apache Commons Codec中的此类。(您需要and方法。)encodeToString(byte[])
decode(String)
来自http://www.mkyong.com/java/how-do-convert-byte-array-to-string-in-java/的回答
String example = "This is an example";
//Convert String to byte[] using .getBytes() function
byte[] bytes = example.getBytes();
//Convert byte[] to String using new String(byte[])
String s = new String(bytes);
首先,不要调用 XORing 加密。说真的,如果您需要保护您的数据,CipherOutputStream 和 CipherInputStream 就在那里。
感谢流链接,您可以拥有 DataOutputStream -> CipherOutputStream -> ByteArrayOutputStream。这将为您提供正确加密的字节。在另一端使用反向 API,你会得到你的字符串。