gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:56:31 25 4
gpt4 key购买 nike

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

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-server 上时,它没有显示正确的字符(??PERVI??RES)。我的解密方法有问题吗?

最佳答案

问题可能出在这里:

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 显示选项手册。

关于java - java 中的法语字符解密适用于 Windows,但不适用于 Linux 机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49499204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com