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

时间:2010-02-22 11:12:29

标签: java encryption character-encoding

我正在加密Java中的字符串,当我打印加密数据时,我只看到问号。

举个例子:

  • 纯文字:jjkkjlkljkj

  • 加密文字:???????????

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

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

2 个答案:

答案 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();