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

时间:2015-10-19 08:28:19

标签: java linux utf-8 hsm

我正在研究使用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,但它在Windows-1252中的[UTF-8] /工作正常无效 //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);

由于

1 个答案:

答案 0 :(得分:0)

从不使用String个对象来保存任意二进制数据 - 使用byte数组或其包装。

原因是当从字节数组转换为字符串时,给定的语言环境用于将字节转换为字符对象,这在很多情况下会导致字符串不能保存您认为应该存在的确切字节,特别是字节值> = 128。

多年前我在我编写的RADIUS服务器中遇到过类似的问题。它对于绝大多数密码都可以正常工作,但是如果用户密码中有一个£符号,则US-ASCII和UK-ASCII之间的差异会导致基础字节值被破坏,从而导致错误计算加密密码和登录失败。