我正在加密Java中的字符串,当我打印加密数据时,我只看到问号。
举个例子:
纯文字:jjkkjlkljkj
加密文字:???????????
再次解密此文本后,我再次获得jjkkjlkljkj
。
所以看起来加密工作正常。但为什么我只能看到问号?
答案 0 :(得分:6)
是的,这是因为您无法打印加密产生的字符串。
请注意,将加密结果保存在字符串中可能会导致数据的丢失,因此请勿这样做。将其作为字节数组,并将其转换为可显示的格式,如Base64或简单的十六进制。
答案 1 :(得分:1)
问题的根本原因在于您呈现加密数据的方式。使用的字符编码不会将这些字符识别为其字符集之一,也不会为这些字符设置合适的字形(字体)。即使这样,当你使用“正确的”字符编码(尝试用UTF-8显示它)时,它也不会是人类可读的。
我认为你有byte[]
的味道,并试图使用String
将其转换为new String(bytearray)
。如果您的目的是将其转移为String
而不是byte[]
,那么您应该使用Apache Commons Codec Base64#encodeBase64String()
或将byte[]
转换为hexstring如下:
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();