Java字符串到bytearray返回字符串

时间:2009-10-19 06:49:06

标签: string bytearray xor

我有一个客户端和服务器java应用程序需要加密文本相互传递。我正在使用XOR加密来加密我想要的文本。

问题是readline()不接受已经异或的字符串,只有在接受字节时才会被接受。

所以我已经将我的明文(字符串)转换为客户端的字节数组,并试图转换回服务器端的字符串。

可悲的是,我正在寻找的结果仍然是胡言乱语,而不是我所寻求的明文。

有谁知道如何使bytearrays更改回原始字符串?或者是否有更好的方法通过readline()函数发送XOR加密文本?

3 个答案:

答案 0 :(得分:19)

在你应用了像XOR这样的东西后,你最终得到了任意的二进制数据 - 不是一个编码的字符串。

将任意二进制文件转换为文本的传统安全方法是使用base64 - 不要尝试从中创建一个新字符串。所以你的过程将是这样的:

  • 以纯文本字符串开头。
  • 使用UTF-8,UTF-16或类似内容对纯文本进行编码。 不要使用平台默认编码,或任何像ASCII这样的限制。你现在有一个字节数组。
  • 应用您的加密。 (XOR非常弱,但让我们把它留给一边。)你仍然有一个字节数组。
  • 应用base64编码以获取字符串。

然后当你需要解密时......

  • 应用base64 解码将字符串转换为字节数组。
  • 应用二进制解密过程(例如,再次进行XOR)。你还有一个字节数组。
  • 现在将该字节数组解码为字符串,例如使用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,你将得到你的字符串。