我使用以下代码解密加密的字符串
{{1}}
当我在本地运行代码并将其部署在我的本地tomcat服务器上时,它会显示正确的法语字符(即ÉPERVIÈRES)。但是当我在Linux框中运行的tc-server上部署代码时,它不会显示正确的字符(?? PERVI ?? RES)。 我的解密方法有问题吗?
答案 0 :(得分:3)
问题可能在这里:
return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)));
new String(byte[] bytes)
使用平台的默认字符集,通常应该避免使用。而是使用new String(byte[] bytes, Charset charset)
并指定加密数据的编码。例如,如果数据是UTF-8:
return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)), StandardCharsets.UTF_8);
您可以通过调用Charset.defaultCharset()
在平台上找到默认字符集,因此请在本地服务器上进行检查,并在代码中使用该字符集。
也可能是终端无法正确显示Unicode输出的问题,但这取决于您使用的终端软件。查看手册中的Unicode显示选项。