java中的法语字符解密适用于Windows但不适用于Linux机器

时间:2018-03-26 19:29:19

标签: java encryption

我使用以下代码解密加密的字符串

{{1}}

当我在本地运行代码并将其部署在我的本地tomcat服务器上时,它会显示正确的法语字符(即ÉPERVIÈRES)。但是当我在Linux框中运行的tc-server上部署代码时,它不会显示正确的字符(?? PERVI ?? RES)。 我的解密方法有问题吗?

1 个答案:

答案 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显示选项。