RSA签名

RSA秘钥对在上一章节有具体生成步骤,可供参考。

 

商户算法签名模型设置为RSA时,采用本文档签名算法。

1、商户请求支付时,以商户自行生成的私钥进行RSAWithSign签名操作,平台将用商户生成的公钥进行验证签名。具体请参考SDK。

请求支付RSA签名算法街口支付

  1. Java:
  2. sign = RSAWithSign.signByPrivateKey(请求支付网关原始签名串,商户生成的私钥)
  3.  
  4. PHP:
  5. $privatekey = openssl_get_privatekey('商户生成的私钥');
  6. openssl_sign(请求支付网关原始签名串,$sign_info,$privatekey,OPENSSL_ALGO_MD5);
  7. $sign = base64_encode($sign_info);

2、商户接收异步通知sign签名,以平台自带的公钥进行验证签名,具体请参考SDK。

异步接收通知RSA验证签名算法街口支付

  1. Java:
  2. true or false = RSAWithSign.validateSignByPublicKey(异步通知接收原始签名串, 平台自带的公钥, sign参数值)
  3. PHP:
  4. $publickey = openssl_get_publickey('平台自带的公钥');
  5. true or false = openssl_verify(异步通知接收原始签名串,$sign,$publickey,OPENSSL_ALGO_MD5);

举个例子:

请求支付参数列表街口支付

  1. service_type="connect_service"
  2. merchant_code="100000"
  3. interface_version="V1.0"
  4. sign_type="MD5"
  5. order_no="2233456788"
  6. order_time="2016-01-01 12:00:00"
  7. order_amount="100"
  8. product_number="1"
  9. notify_url="http://www.xxx.com/notify_url"
  10. return_url="http://www.xxx.com/return_url"
  11. bank_code="WEBCHAT"
  12. product_name="proname"
  13. order_userid="userid"
  14. order_info="additional"
  15. notice_type="0"
  16. sign="cdaTQyJ0aQ+MYgd33AgtkbC7p/e7ScaGhK+GDh6tsn+GNr4vPChvfJvIa70L51LO6904qYIvdImwQLsAnDDASphfKsPIjkeckq74DHz7DrMLuAjFFlL4uaIKCeZY/r3DQT3ASIgG3UFnDU2dMJr9SbVNmLRm//XWdEtpUozDixk="

第一步:根据请求支付原始签名字符串规定格式把对应参数值进行拼接,如下:

拼接字符串结果街口支付

  1. 100000~|~V1.0~|~MD5~|~2233456788~|~2016-01-01 12:00:00~|~100~|~1
  2. ~|~http://www.xxx.com/notify_url~|~http://www.xxx.com/return_url~|~WEBCHAT
  3. ~|~0~|~connect_service

第二步:根据商户自行生成的私钥进行生成sign签名,如下:

签名Sign结果街口支付

  1. sign = RSAWithSign.signByPrivateKey(第一步拼接字符串 ,"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJx9ronbllg1+h+JaEGYCdrhKsxFfPjuRjzP3OhOtlcf5T6VBsZS9F2JhNiHiccsHMStvOEX7UbLUOWkNviW4uHR5ee9Vg+48AbDBB/d142+9sShNeN4feDqWYDH10DExH/KxcYp1MEytjiq+NO4SwlJl64eu6/ONgNOOL27Ynf9AgMBAAECgYEAlC0xYlmpHzdk8g2iyVFUK4u/gZJehjrgCN7tlo5Je2+5GqvzsUCFIDiBsKGOJSiwyM6VpTGJu9nybK80WehNRPfYpLI4dTYZc6M94dpQk59yo8OpztRJp/lsLs2rLsY7pmOFm4p4X+rg8exn776Z/rEvlUgfrgMFJRHf8ACOJ+UCQQDYG7j8QKq4ILqUhFX6FpdDxP1DFcUnBr5OsYaLRSG8T6buyu6GqWQgzx6IH4y+wVWj+4urEO8kRJnsPuqhZBxfAkEAuWC4KJjHEsby7BY3QKJ/SFkgLnu5c9T0DYlTNYl+RQko8cdBGRwqAUlLhxu2LRPG2YsHYu9FNYySF4EuxxTJIwJAHP+LUP30aoSpxKgFSWuinItgWJIhRF1ZSAH2RdXe8v/VLJG6dANi1iw0sptZLXeP4FMuqKO7EyjJZrQCk+l1DQJBAJL4mqkdD1/Uuc3xgxbMfmtmtfwEfbDXGjMNOBpPCvxC2eJuni8BRFBGwwm4L8QnVNUuw8lteAqPi1f1RJfz488CQGb0TzKs2QOia6YTye74bIK7Vp4A8PqMoR46CaMnjbt2lYHWx12z5Y+VuDleNgoaA/Xg6qKKcGOnTUlQW85yIiQ=")
  2. sign = "cdaTQyJ0aQ+MYgd33AgtkbC7p/e7ScaGhK+GDh6tsn+GNr4vPChvfJvIa70L51LO6904qYIvdImwQLsAnDDASphfKsPIjkeckq74DHz7DrMLuAjFFlL4uaIKCeZY/r3DQT3ASIgG3UFnDU2dMJr9SbVNmLRm//XWdEtpUozDixk="