我正在研究使用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);
由于
答案 0 :(得分:0)
从不使用String
个对象来保存任意二进制数据 - 使用byte
数组或其包装。
原因是当从字节数组转换为字符串时,给定的语言环境用于将字节转换为字符对象,这在很多情况下会导致字符串不能保存您认为应该存在的确切字节,特别是字节值> = 128。
多年前我在我编写的RADIUS服务器中遇到过类似的问题。它对于绝大多数密码都可以正常工作,但是如果用户密码中有一个£
符号,则US-ASCII和UK-ASCII之间的差异会导致基础字节值被破坏,从而导致错误计算加密密码和登录失败。