MD5加密支付宝支付与微信支付

在做支付宝支付与微信支付时看到两家公司给的dom其中关于MD5加密的
支付宝的dom:
DigestUtils.md5Hex(test).toUpperCase();
微信的dom:
private static String MD5(String sourceStr) throws UnsupportedEncodingException {
String result = “”;
try {
MessageDigest md = MessageDigest.getInstance(“MD5”);
md.update(sourceStr.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer(“”);
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append(“0”);
buf.append(Integer.toHexString(i));
}
result = buf.toString();
} catch (NoSuchAlgorithmException e) {
// log.info(e);
}
return result;
}
测试了下,
第一张图(https://img-blog.csdn.net/20150828222552981)
这里得到的结果是相同的,但是在支付时在微信使用DigestUtils.md5Hex(test).toUpperCase();函数得到的是错误的签名。不知道怎么回事
其中微信的dom是不能使用中文的,但是测试多次得到的结果都是三者相同,郁闷
要使用中文只需要将md.update(sourceStr.getBytes());改为md.update(sourceStr.getBytes(“UTF-8”));
即可。
贴出代码:
private static String MD5TOE(String sourceStr) throws UnsupportedEncodingException {
String result = “”;
try {
MessageDigest md = MessageDigest.getInstance(“MD5”);
md.update(sourceStr.getBytes(“UTF-8”));
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer(“”);
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append(“0”);
buf.append(Integer.toHexString(i));
}
result = buf.toString();
//log.info(“MD5(” + sourceStr + “,16) = ” + buf.toString().substring(8, 24));
} catch (NoSuchAlgorithmException e) {
// log.info(e);
}
return result;
}
其中这个log.info是得到16位的MD5.
有知道在支付时在微信使用DigestUtils.md5Hex(test).toUpperCase();函数得到的是错误的签名。可以说下原因。谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值