【问题标题】:Java string to bytearray back to stringJava 字符串到字节数组返回到字符串
【发布时间】:2009-10-19 06:49:06
【问题描述】:

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

问题在于 readline() 不接受已异或的字符串,并且仅当它以字节为单位时才接受。

所以我在客户端将我的纯文本(字符串)转换为字节数组,并尝试在服务器端转换回字符串。

遗憾的是,我正在寻找的结果仍然是乱码,而不是我寻找的明文。

有谁知道如何让字节数组变回原来的字符串?或者有没有更好的方法通过 readline() 函数通过 XOR 加密文本发送?

【问题讨论】:

    标签: string bytearray xor


    【解决方案1】:

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

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

    • 以纯文本作为字符串开头。
    • 使用 UTF-8、UTF-16 或类似的方式对纯文本进行编码。 不要使用平台默认编码,或任何限制性的编码,如 ASCII。你现在有了一个字节数组。
    • 应用您的加密。 (XOR 很弱,但让我们把它放在一边。)你仍然有一个字节数组。
    • 应用 base64 编码获取字符串。

    那么当你需要解密的时候……

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

    有多种 Java base64 库可用,例如Apache Commons Codec 中的this class。 (您需要 encodeToString(byte[])decode(String) 方法。)

    【讨论】:

    • +1。 @NewJavaProgrammer- base64 也没有加密,但是它被编码了。
    • @RichardOD - 实际上由@Jon 的方法产生的base64 是既编码又加密的。
    • 是的 - 我不知何故没有看到“应用你的加密”位。早上太早了!
    【解决方案2】:

    答案来自 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);
    

    【讨论】:

      【解决方案3】:

      首先,不要调用 XORing 加密。说真的,如果您需要保护您的数据,CipherOutputStream 和 CipherInputStream 就在那里。

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

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 2011-10-04
        • 2015-05-24
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多