Linux与windows之间md5加密会引起不同

最近对接两个接口,都涉及到md5加密。

在本地调试成功以后,直接上服务器开测。

意外的情况发生了,其中一个接口居然反馈给我sign值校验错误。但另一个sign值校验过了。

如果说是md5加密算法弄错了,那应该两边都不可能通过。

我又在本地运行了一下,都传入相同的值。偏偏服务器的就是会出错。

僵持了五分钟,我发现一个接口需要md5加密的字段里涉及中文。而另一个不需要。

难道说是中文的原因?我把中文去掉,sign值校验通过。

所以你涉及md5加密的地方,应该加一个转化字节。并类型选择utf-8.

public static String string2MD5Daxie(String bs) {

char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

'A', 'B', 'C', 'D', 'E', 'F' };

try {

//转化字节,并选择utf-8

byte[] btInput = bs.getBytes("UTF-8");

// 获得MD5摘要算法的 MessageDigest 对象

MessageDigest mdInst = MessageDigest.getInstance("MD5");

// 使用指定的字节更新摘要

mdInst.update(btInput);

// 获得密文

byte[] md = mdInst.digest();

// 把密文转换成十六进制的字符串形式

int j = md.length;

char str[] = new char[j * 2];

int k = 0;

for (int i = 0; i < j; i++) {

byte byte0 = md[i];

str[k++] = hexDigits[byte0 >>> 4 & 0xf];

str[k++] = hexDigits[byte0 & 0xf];

}

return new String(str);

} catch (Exception e) {

e.printStackTrace();

return null;

}}

大致如此

朗suke

发布了4 篇原创文章 · 获赞 1 · 访问量 1316

私信

关注

标签:加密,String,windows,byte0,str,Linux,sign,md5

来源: https://blog.csdn/qq_39025638/article/details/104198160

更多推荐

linux和windows下md5不一样,Linux与windows之间md5加密会引起不同