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