标签:加密 String windows byte0 str Linux sign md5
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.net/qq_39025638/article/details/104198160
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。