和包支付开发接口中的签名

ahuwangqun 2015-08-17 11:27:26
移动和包开发接口。
里面的参数有一项是hmac签名。
他的方法是这样的。
签名源:请求参数按文档顺序相加,其中,hmac、merchantCert、serverCert不参与签名
方式是MD5/RSA加密。我的问题加密是MD5的

参数列表是
商户编号 merchantId
商户请求号 requestId
签名方式 signType (MD5或者RSA)
接口类型 type
版本 version
商户订单号 orderId
证书公钥 merchantCert (不参与签名,如果singType=RSA,此项必输)
签名 hmac



这个是文档中给的请求参数列串
merchantId=888009941120001&requestId=2011/3/915:34:47&signType=MD5&type=OrderQuery&version=2.0.0&orderId=2011030953515&hmac=c0353365e28b13e9789973fbec15a9ef&merchantCert=

请问这里 面的hmac是怎么得到的。
用的是JAVA自带的MD5
...全文
378 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanhuan78 2015-10-23
  • 打赏
  • 举报
回复
楼主 一直没有找到和包的demo ,能给发一下吗?
ahuwangqun 2015-08-17
  • 打赏
  • 举报
回复
引用 1 楼 HinanaiTenshi 的回复:
上面不是说参加签名的参数顺序相加啊,另外jdk的md5不需要公钥,但只能签名md5类型,rsa要用bouncycastle。
什么叫md5不需要公钥,不太明白。 这个是md5类 /** * md5加密 * @param plainText:原字符串 * @param type:16位/32位加密 * @return */ public static String getMd5(String plainText, int type) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.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)); } if (type == 32) { return buf.toString(); } else { return buf.toString().substring(8, 24); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } 我把demo中那几个参数连成字符串都得不到想要hmac。 直接连起来,去掉&和= , 只要值。这些试了都不行。
HinanaiTenshi 2015-08-17
  • 打赏
  • 举报
回复
上面不是说参加签名的参数顺序相加啊,另外jdk的md5不需要公钥,但只能签名md5类型,rsa要用bouncycastle。

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧