支付宝之私钥签名公钥验签


8th,March,2016 Tuesday
RSA公钥加密算法简介
非对称加密算法只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

加密用公钥,解密用私钥。

签名&&加密
文档:
“RSA是一种公钥加密算法。能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。主要用于公钥加密私钥解密、私钥签名公钥验签。”--from 支付宝文档
“使用各自语言对应的SHA1WithRSA签名函数利用商户私钥对待签名字段进行签名,并进行Base64编码。”--from 支付宝文档
(r:  我可以翻白眼吗,前面不懂签名是什么意思,相当于加密码,还是解密。!公钥加密私钥解密与私钥签名公钥验签用的是同一套公钥体系,但数字签名与数字加密实现过程是相反的,密钥对也有所区别。数字签名对身份进行认证,保证发送消息的完整性。 数字加密可保证信息的保密性)


支付宝签名验签:

“支付宝公钥:开发者请求支付宝并获得返回时,开发者用于验签使用的公钥”--from 支付宝文档

签名算法: 商户生成签名字符串,现支持RSA
签名要求: 请求和接收数据均需要 校验签名
r: 接收支付宝返回的数据需通过支付宝公钥进行验签,确认返回数据者身份为支付宝。
客户端将商户的签名字符串用私钥签名上传到服务器,服务器端通过开发人员上传的公钥进行验签,确认身份。)

密钥分为三种类型:
1) 开放平台密钥: 应用公钥 // app_id 和密钥 openapi
2) 合作伙伴密钥:商户 // partner_id和密钥 mapi  签名方式:MD5,RSA,DSA(签名方式依据具体产品)。 功能包括:快捷登陆,移动支付,即时到账收款,手机网页支付。
3) 无线产品密钥: (expired)

签名流程:
1) 组装待签名字符串 
2) 调用签名函数
a. " 使用各自语言对应的SHA1WithRSA签名函数利用商户私钥对待签名字段进行签名,并进行Base64编码。" --from aliDoc
 (  r:网关为mapi,商户即合作伙伴,利用合作伙伴密钥和partner_id 进行签名)
3) 使用签名
"得到的签名结果也是一个字符串,这个字符串就是sign参数的值,将这个字符串赋值给sign参数并发起请求。"--from aliDoc

验签流程:
1) 组装待验签字符串
2) 调用签名验签函数
“RSA:使用各自语言对应的SHA1WithRSA签名验证函数,传入待验签字段、支付宝公钥、参数sign对应的值(该参数为支付宝返回)进行验签,根据返回结果判定是否验签通过。


RSA加密方式:
1)通过openssl工具生成公私钥 
2) 上传生成的公钥,获取支付宝公钥。


资料:
支付宝帮助中心文档: 即时到账


参考资料:

RSA算法原理(一)

RSA算法原理(二)

iOS Objective-C RSA encrypt with only public key and descrypt with PHP

加密和签名公钥私钥问题?

Objective-C-RSA

WXPayDemo










WXPayDemo-master-2016-03-08.zip
490.5 

你可能感兴趣的:(支付宝之私钥签名公钥验签)