最近在做酷派支付验证,遇到签名验证问题,卡好久了。
源数据如下:
var trans_data = '{"exorderno":"10004200000001100042","transid":"02113013118562300203","waresid":1,"appid":"20004600000001200046","feetype":0,"money":3000,"count":1,"result":0,"transtype":0,"transtime":"2013-01-31 18:57:27","cpprivate":"123456"}';
var key = 'MjhERTEwQkFBRDJBRTRERDhDM0FBNkZBMzNFQ0RFMTFCQTBCQzE3QU1UUTRPRFV6TkRjeU16UTVNRFUyTnpnek9ETXJNVE15T1RRME9EZzROVGsyTVRreU1ETXdNRE0zTnpjd01EazNNekV5T1RJek1qUXlNemN4';
var sign = '28adee792782d2f723e17ee1ef877e7 166bc3119507f43b06977786376c0434 633cabdb9ee80044bc8108d2e9b3c86e';
这个 key 经过 2 次 base64_decode 拿到的有效数据为:14885347234905678383+132944888596192030037770097312923242371
其中+的前面为 privatekey,后面为 modkey
文档里是这样写的: key = base64(${private_key}+${mod_key}),即 key 是由 private_key 和 mod_key 中间用加号“+”连接后做了 base64 编码得到的字符串。商户需要先把 private_key 和 mod_key 从 key 中解析出来。然后用 RSA 算法和解析出来的 keys 对签名 sign 进行解密得到的字符串,与将 transdata 进行 MD5 加密后的字符串进行比较。如果两者相等,则签名验证通过。
我在网上有找到这个:RSAKeyPair
,但是都只有说加密,没说解密,我找到了它的解密函数,但是解出来是乱码
我自己先用简单的数据加密,然后再调它的解密,出来还是乱码。
对加解密这块的知识实在是匮乏,求各位大神帮忙,解决了红包感谢!
我现在临时的解决方案是:解密算法用 php 实现的,然后用 node 执行 php 脚本
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.