Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中法语字符的解密可以在windows上工作,但不能在Linux上工作_Java_Encryption - Fatal编程技术网

java中法语字符的解密可以在windows上工作,但不能在Linux上工作

java中法语字符的解密可以在windows上工作,但不能在Linux上工作,java,encryption,Java,Encryption,我使用以下代码对加密字符串进行解密 public String decrypt(String decryptMe) throws Exception { if (decryptMe == null) { return null; } else { Cipher cipher = Cipher.getInstance("AES"); cipher.init(2, this.getKeySpec()); return n

我使用以下代码对加密字符串进行解密

public String decrypt(String decryptMe) throws Exception {
    if (decryptMe == null) {
        return null;
    } else {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(2, this.getKeySpec());
        return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)));
    }
}
当我在本地运行代码并将其部署在本地tomcat服务器上时,它会显示正确的法语字符(即ÉPERVIÈRES)。但是当我在运行Linux的tc服务器上部署代码时,它并没有显示正确的字符(?PERVI?RES)。
我的解密方法有问题吗?

问题可能在这里:

return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)));
使用平台的默认字符集,通常应避免使用。相反,请使用并指定加密数据的编码。例如,如果数据为UTF-8:

return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)), StandardCharsets.UTF_8);
您可以通过调用查找平台上的默认字符集,因此请在本地服务器上检查它,并在代码中使用该字符集


这也可能是您的终端没有正确显示Unicode输出的问题,但这取决于您使用的终端软件。查看手册中的Unicode显示选项。

问题可能在于:

return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)));
使用平台的默认字符集,通常应避免使用。相反,请使用并指定加密数据的编码。例如,如果数据为UTF-8:

return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(decryptMe)), StandardCharsets.UTF_8);
您可以通过调用查找平台上的默认字符集,因此请在本地服务器上检查它,并在代码中使用该字符集


这也可能是您的终端没有正确显示Unicode输出的问题,但这取决于您使用的终端软件。查看手册中的Unicode显示选项。

您的Linux终端支持Unicode吗?@HunterMcMillen如何检查?是否有任何命令可以告诉我支持的Unicode?它可能在应用程序的首选项菜单中。您的Linux终端是否支持Unicode?@HunterMcMillen如何检查?是否有任何命令可以告诉我支持的Unicode?它可能会出现在任何应用程序的首选项菜单中。最好使用UTF-8,因为它可以处理所有脚本。@JoopEggen需要在加密之前匹配字节的编码,但是,是的,如果您的代码处理两侧,那么您应该将两者都设置为使用UTF-8,用于加密。@SeanVanGorder-我在本地记录了默认字符集值,并在Linux服务器上进行了测试。价值观是不同的。在我的本地版本中,它是>>windows-1252,但在Linux框中,它是>>US-ASCII。@默认情况下,Yoseph US-ASCII有点奇怪,它只包含基本的字母/数字/符号,而不包括您需要的重音字符。如果操作系统以某种方式设置为US-ASCII,您可能需要更改它。@SeanVanGorder我在Unix/Linux上没有那么多经验。你能告诉我如何更改默认值吗?的确。最好使用UTF-8,因为它可以处理所有脚本。@JoopEggen需要在加密之前匹配字节的编码,但是,是的,如果您的代码处理两侧,那么您应该将两者都设置为使用UTF-8,用于加密。@SeanVanGorder-我在本地记录了默认字符集值,并在Linux服务器上进行了测试。价值观是不同的。在我的本地版本中,它是>>windows-1252,但在Linux框中,它是>>US-ASCII。@默认情况下,Yoseph US-ASCII有点奇怪,它只包含基本的字母/数字/符号,而不包括您需要的重音字符。如果操作系统以某种方式设置为US-ASCII,您可能需要更改它。@SeanVanGorder我在Unix/Linux上没有那么多经验。您能告诉我如何更改默认值吗?