如何在java中转换未知字符?

时间:2017-03-15 17:03:50

标签: java encoding cryptography

请不要将其标记为重复。

我正在使用Blowfish算法来加密和解密文件中的内容。问题是加密文件的输出字符有太多特殊字符

特殊字符(加密文字): - Z81‡Ç¬ú²±DN¢÷HÜ4ºÜºT+ .E SA

之后我将特殊字符转换为十六进制,它将值赋予

8E383187C7ACFAB214B113444EA248DC34BADCBA54F7032ECA2B8AC03C6B95C67D2F46F586E4CD86

如果我试图将其转换为字符串,则无法获得相同的加密文本

以下用于将十六进制转换为字符串的java代码

package bytearray;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.xml.bind.DatatypeConverter;



public class ByteArray {


    public static byte[] toByteArray(String s) {
        return DatatypeConverter.parseHexBinary(s);
    }

    public static void main(String[] args) throws IOException {
        String balaji  ="8E383187C7ACFAB214B113444EA248DC34BADCBA54F7032ECA2B8AC03C6B95C67D2F46F586E4CD86";

        byte[] pri = toByteArray(balaji);
        String value = new String(pri);
        System.out.println(value);


    }

}

请帮助我们如何将十六进制转换为字符串。

预期产出: - Z81‡Ç¬ú²±DN¢÷HÜ4ºÜºT+ .E SA

获得的输出: - 81ǬDNH4ܺT. +

1 个答案:

答案 0 :(得分:0)

您需要确保与HEX之间的转换使用相同的编码。在这种情况下,我认为它应该是UTF-8

public static String toHexString(String arg,String encoding) throws Exception {

    return String.format("%040x", new BigInteger(1, arg.getBytes(encoding)));
}



public static byte[] toByteArray(String s) {

    return DatatypeConverter.parseHexBinary(s);
}



public static void main(String[] args)throws Exception{

    String s1 = "Ž81‡Ç¬ú²±DN¢HÜ4ºÜºT÷.Ê+ŠÀ";
    System.out.println(s1);

    String s2 = toHexString(s1,"UTF-8");
    System.out.println(s2);

    String s3 = new String(toByteArray(s2));
    System.out.println(s3);


    String s4 = toHexString(s1,"ISO-8859-15");
    System.out.println(s4);

    String s5 = new String(toByteArray(s4));
    System.out.println(s5);

}

<强>输出:

  

Z81‡Ç¬ú²±DN¢÷HÜ4ºÜºT+ .E SA

     

c5bd3831e280a1c387c2acc3bac2b2c2b1444ec2a248c39c34c2bac39cc2ba54c3b72ec38a2bc5a0c380

     

Z81‡Ç¬ú²±DN¢÷HÜ4ºÜºT+ .E SA

     

b438313fc7acfab2b1444ea248dc34badcba54f72eca2ba6c0

     

81?ǬDNH4ܺ吨。+

正如您在UTF-8encode使用decode时在输出中看到的那样,我得到了正确的结果,但是当encode带有ISO和{时{1}} decode我得到了你得到的东西。