我有一个客户端和服务器java应用程序需要加密文本相互传递。我正在使用XOR加密来加密我想要的文本。
问题是readline()不接受已经异或的字符串,只有在接受字节时才会被接受。
所以我已经将我的明文(字符串)转换为客户端的字节数组,并试图转换回服务器端的字符串。
可悲的是,我正在寻找的结果仍然是胡言乱语,而不是我所寻求的明文。
有谁知道如何使bytearrays更改回原始字符串?或者是否有更好的方法通过readline()函数发送XOR加密文本?
答案 0 :(得分:19)
在你应用了像XOR这样的东西后,你最终得到了任意的二进制数据 - 不是一个编码的字符串。
将任意二进制文件转换为文本的传统安全方法是使用base64 - 不要尝试从中创建一个新字符串。所以你的过程将是这样的:
然后当你需要解密时......
new String(data, utf8Charset)
取回原始字符串。可以使用各种Java base64库,例如this class中的Apache Commons Codec。 (您需要encodeToString(byte[])
和decode(String)
方法。)
答案 1 :(得分:7)
回答 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);
答案 2 :(得分:1)
首先,不要调用XORing加密。说真的,如果你需要保护你的数据,CipherOutputStream和CipherInputStream就在你身边。
感谢您使用流链接,您可以拥有DataOutputStream - > CipherOutputStream - > ByteArrayOutputStream。这将为您提供正确加密的字节。在另一端使用反向API,你将得到你的字符串。