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

我在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();