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