前言:报文在项目之间传递的时候出现验签失败,但是打印出来的需要验签的字符串显示结果都是正确的;直接将传送的字节流(byte数组)打印出来,发现了其中中文的byte值不一样,初步断定是报文在传输和接收时的编码方式不一样;但是我的两个项目都是布署在一台机器上的,应该不会出现此问题,接下来,一步步找出真正原因:
确定当前系统编码方式,其实从工程中的属性就可以看出来,但是用代码验证一下更靠谱:
String s = "中文集abc结果"; byte[] b = s.getBytes(); for(byte i : b) { System.out.print(i + ","); } System.out.println(""); String t; try { t = new String(b, "UTF-8"); // 挨个换编码方式来试,一般就UTF-8和GBK byte[] c = t.getBytes(); for(byte i : c) { System.out.print(i + ","); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); }
验证了当前系统的编码方式,接下来就挨个试喽:
最后发现在验签的时候都是使用的默认的方法:"".getBytes();把两边的编码方式改成一致即修复问题
看来真是伤不起,以后使用"".getBytes的时候一定要把编码方式加上。