gpt4 book ai didi

java - Thales HSM - Windows cp 1252 成功/Linux UTF-8 失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:01 25 4
gpt4 key购买 nike

我正在使用 HSM 模块集成开发 TCP/IP 应用程序。我的 JAVA 代码在 Windows 32 位/JRE 32 位/IBM Websphere 7 中运行良好,当我升级到 RedHat Linux-64 位/JRE 64 位/IBM webshere 8 时,如果我发送长度低于 127 的字符串工作正常,但超过 127 时它返回响应。我也做了一些编码技术,但面对相同的 pblm 请指导我。

如果 commandLength = 小于 127,工作正常,但大于 127 [UTF-8 编码失败]因此,对于超过 127 个,我使用扩展的 ascii,但它在 [UTF-8] 中不起作用/在 windows-1252 中工作正常//hsmMessage.insert(0, (char)commandLength);

         char[] extended_ascii = new char[1];           
byte cp437bytes[]= new byte[1];
cp437bytes[0] = (byte) commandLength;
extended_ascii = new String(cp437bytes).toCharArray(); //extended_ascii = new String(cp437bytes, "CP437").toCharArray();
hsmMessage.insert(0, extended_ascii);

谢谢

最佳答案

切勿使用String 对象来保存任意二进制数据 - 使用byte 数组或其包装器。

原因是当从字节数组转换为字符串时,给定的语言环境用于将字节转换为字符对象,这在许多情况下最终会导致字符串不包含您认为应该包含的确切字节,尤其是对于字节值 >= 128。

多年前,我在编写的 RADIUS 服务器中遇到了一个非常相似的问题。它适用于绝大多数密码,但如果用户密码中有一个 £ 符号,US-ASCII 和 UK-ASCII 之间的差异会导致底层字节值被破坏,从而导致计算错误的加密密码,以及登录失败。

关于java - Thales HSM - Windows cp 1252 成功/Linux UTF-8 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209860/

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