Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的加密字符串看起来只包含问号?_Java_Encryption_Character Encoding - Fatal编程技术网

Java 为什么我的加密字符串看起来只包含问号?

Java 为什么我的加密字符串看起来只包含问号?,java,encryption,character-encoding,Java,Encryption,Character Encoding,我用Java加密字符串,当我打印加密数据时,我只看到问号 例如: 纯文本:jjkjlkljkj 加密文本:??????? 再次解密此文本后,我将再次获得jjkjlkljkj 所以看起来加密工作正常。但是为什么我只能看到问号呢?是的,这是因为您无法打印加密产生的字符串 请注意,将加密结果保存为字符串可能会导致数据丢失,所以不要这样做。将其作为字节数组,并将其转换为可显示的格式,如或只是简单的十六进制。问题的根本原因是如何显示加密数据。所使用的字符编码无法将这些字符识别为其字符集之一,也没有适合

我用Java加密字符串,当我打印加密数据时,我只看到问号

例如:

  • 纯文本:
    jjkjlkljkj

  • 加密文本:
    ???????

  • 再次解密此文本后,我将再次获得
    jjkjlkljkj


所以看起来加密工作正常。但是为什么我只能看到问号呢?

是的,这是因为您无法打印加密产生的字符串


请注意,将加密结果保存为字符串可能会导致数据丢失,所以不要这样做。将其作为字节数组,并将其转换为可显示的格式,如或只是简单的十六进制。

问题的根本原因是如何显示加密数据。所使用的字符编码无法将这些字符识别为其字符集之一,也没有适合这些字符的字形(字体)。即使这样,当您使用“正确的”字符编码(尝试用UTF-8显示)时,它也不会是人类可读的

我假设您有一个
byte[]
的风格,并试图使用
newstring(bytearray)
将其转换为
String
。如果您的目的是将其作为
字符串
而不是
字节[]
,那么您应该使用或将
字节[]
转换为以下十六进制字符串:

StringBuilder hex = new StringBuilder(bytea.length * 2);
for (byte b : bytea) {
    if ((b & 0xff) < 0x10) hex.append("0");
    hex.append(Integer.toHexString(b & 0xff));
}
String hexString = hex.toString();
StringBuilder十六进制=新的StringBuilder(bytea.length*2);
for(字节b:bytea){
if((b&0xff)<0x10)十六进制附加(“0”);
hex.append(Integer.toHexString(b&0xff));
}
字符串hextString=hex.toString();

当我们理解您的意思时,您的问题需要更清楚一点,花一点时间将其格式化是值得的。谢谢