RSA 解密问题

2017-06-20 13:09:55 +08:00
 imherer

最近在做酷派支付验证,遇到签名验证问题,卡好久了。

源数据如下:

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 脚本

4309 次点击
所在节点    Node.js
26 条回复
darkbread
2017-06-20 17:21:35 +08:00
@imherer 我的意思是如果你想自己写的话就要参考那两个函数了, 因为 RSA 算法大家应该用的都是同一个, 但输入和输出似乎是用那两个函数自定义了。
imherer
2017-06-20 17:23:03 +08:00
@darkbread 好的,谢谢!
popok
2017-06-20 17:24:27 +08:00
@darkbread 那 2 个好像是普通的进制转换吧
darkbread
2017-06-20 17:34:01 +08:00
@popok 不懂 PHP,不过看名字好像是的。因为刚刚拿私钥验证了一下发现对不上就怀疑那两个函数是不是有进行其他的格式化。随手试的,说错了请见谅。
jiangzhuo
2017-06-20 17:49:20 +08:00
imherer
2017-06-20 17:54:58 +08:00
@jiangzhuo 非常感谢,稍等 我先看看,如果没问题一定红包感谢你!😀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX