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 class在Apache Commons Codec。 (你想要encodeToString(byte[])
和decode(String)
方法。)
首先,不要调用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);
+1答案。 @ NewJavaProgrammer- base64也没有加密,但它是编码的。 – RichardOD 2009-10-19 06:58:01
@RichardOD - 实际上@ Jon的方法生成的base64都是编码和加密的。 – 2009-10-19 07:06:16
是的 - 我以某种方式没有看到“应用您的加密”位。一大早! – RichardOD 2009-10-19 07:25:34