Java字符串bytearray回字符串

问题描述:

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

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

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

不幸的是,我所寻找的结果仍然是乱码,而不是我寻找的明文。

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

在应用了XOR之类的东西之后,最终会得到任意的二进制数据 - 而不是的编码字符串。

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

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

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

  • 应用的base64 解码将字符串转换成字节数组。
  • 应用您的二进制解密过程(例如再次XOR)。你仍然有一个字节数组。
  • 现在将该字节数组解码为一个字符串,例如,用new String(data, utf8Charset)找回原始字符串。

有各种Java base64库可用,如this classApache Commons Codec。 (你想要encodeToString(byte[])decode(String)方法。)

+0

+1答案。 @ NewJavaProgrammer- base64也没有加密,但它是编码的。 – RichardOD 2009-10-19 06:58:01

+1

@RichardOD - 实际上@ Jon的方法生成的base64都是编码和加密的。 – 2009-10-19 07:06:16

+0

是的 - 我以某种方式没有看到“应用您的加密”位。一大早! – RichardOD 2009-10-19 07:25:34

首先,不要调用XORing加密。严重的是,如果你需要保护你的数据,CipherOutputStream和CipherInputStream在你身边。

感谢流链接,你可以有DataOutputStream - > CipherOutputStream - > ByteArrayOutputStream。这将使您得到正确加密的字节。在另一端使用反向API,你会得到你的字符串。

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);