现象:
在输入参数里有中文汉字的时候,通过main方法直接执行的结果和通过接口调用这个方法执行的结果不一样,
在输入参数里没有中文汉字的时候,执行结果是一样的。
方法:
/**
* MD5编码
* @param origin 原始字符串
* @return 经过MD5加密之后的结果
*/
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = origin;
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return resultString;
}
其中用接口去调用这个方法的结果应该是错的
初步怀疑:jar包 冲突
但是这个问题的jar包冲突真的有点难找,怀疑是执行其他相同的方法,得到了一个错误的结果。
其实就是一个简单的md5加密,很多开源的jar里都带有,现在项目引进多了,依赖之间就有很多冲突了,想排除也不太容易,看很仔细的看。
不知道有没有大神遇到过类似的问题,说下解决的思路和经验。
==============================================================
这个问题是腾讯微信支付SDK里的工具类有问题,已经解决了,问题在于resultString.getBytes(),是利用的系统编码,用main方法执行是一种编码,在tomcat里运行又是一种编码,所以这里要统一成utf-8,所以把resultString.getBytes()改成resultString.getBytes(“utf-8”),不过后来看到作者也修复了这个问题,可能没有及时通知。地址:https://github.com/grz/wxpay_scanpay_java_sdk_proj/issues/1
============================================================
其实这段代码很容易看出来坑,不用debug。
编码问题吧……