在Java中,如何再次正确地将byte []转换为String到byte []?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中,如何再次正确地将byte []转换为String到byte []?相关的知识,希望对你有一定的参考价值。

我想将TEA加密(byte [])的结果转换为String,然后再将其转换为byte []并检索相同的byte []。

//Encryption in the sending side
String stringToEncrypt = "blablabla"
byte[] encryptedDataSent = tea.encrypt(stringToEncrypt.getBytes());
String dataToSend = new BigInteger(encryptedDataSent).toString());

//Decryption side in the reception side
byte[] encryptedDataReceived = new BigInteger(dataToSend).toByteArray();

但是,当我尝试这个:

System.out.println(new String(encryptedDataSent));

System.out.println(new String(encryptedDataReceived));

boolean equality = Arrays.equals(encryptedDataReceived,encryptedDataSent);
System.out.println("Are two byte arrays equal ? : " + equality);

输出是:

&H7" PAtj݄IZ`H,JKF

&H7" PAtj݄IZ`H,JKF

两个字节数组是否相等? :假的

因此,当我们打印它时,看起来两个byte []是相同的,但它们与我们看到的“false”不完全相同,这是我之后执行的解密的问题。

我也尝试发送一个String with new String(byte[])但是当我们想要将它转换回byte []时它也有同样的问题

我想在开头和转换字节[] - > String-> byte []之后有完全相同的byte []

你有解决方案或了解我在转换中做错了什么吗?

答案

不要试图从byte[]转换为String,就好像它是常规的编码文本数据 - 事实并非如此。它是一个任意的字节数组。

最简单的方法是将其转换为base64或hex - 这将导致ASCII文本可以被可逆地解码回相同的二进制数据。例如,使用public domain base64 encoder

String dataToSend = Base64.encodeBytes(encryptedDataSent);
...
byte[] encryptedDataReceived = Base64.decode(receivedText);
另一答案

尝试在解密字节中使用[] encode = Base64.encode(bytesToStore,Base64.DEFAULT)

另一答案

你不能。 String不是二进制数据的容器。它是UTF-16字符的容器。字符和字节之间的往返无处可靠。

另一答案

尝试明确指定charset。 UTF-8适用于重大案件:

public static void main(String[] args) {
    String in = "幸福";
    try {
        byte[] bytes = in.getBytes("utf-8");
        String out = new String(bytes, "utf-8");
        System.out.println(in + " -> " + out);
        System.out.println("equals: " + out.equals(in));
    } catch (UnsupportedEncodingException unsupportedEncodingException) {
        // do something
    }
}

请注意,当字节数组保持不变时,您将得到完全相同的结果。

以上是关于在Java中,如何再次正确地将byte []转换为String到byte []?的主要内容,如果未能解决你的问题,请参考以下文章

java 有没有人知道如何正确地将它转换为PHP,并且可以在java中提供派生密钥,以便在PHP中进行比较

java 有没有人知道如何正确地将它转换为PHP,并且可以在java中提供派生密钥,以便在PHP中进行比较

java 有没有人知道如何正确地将它转换为PHP,并且可以在java中提供派生密钥,以便在PHP中进行比较

java 有没有人知道如何正确地将它转换为PHP,并且可以在java中提供派生密钥,以便在PHP中进行比较

java 有没有人知道如何正确地将它转换为PHP,并且可以在java中提供派生密钥,以便在PHP中进行比较

java 有没有人知道如何正确地将它转换为PHP,并且可以在java中提供派生密钥,以便在PHP中进行比较