使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知

2023-11-07

由于业务需要,我们需要使用支付宝移动快捷支付做收款。支付宝给了我们《移动快捷支付应用集成接入包支付接口》见支付宝包《WS_SECURE_PAY_SDK》。

支付宝给的服务器demo只有Java、C#、PHP三种,而我们服务器端使用的是C++。这其中就涉及到接收支付宝的服务器异步通知。为了确保接收到的服务器异步通知来至支付宝,我们就必须验证支付宝的签名。坑爹的是,原来PC端使用MD5做签名,估计支付宝考虑到移动端的风险更高,于是改用RSA做移动快捷支付应用的签名。这无疑增加了我们迁移到移动端的开发成本。

支付宝文档中说明是使用openssl,我们这边就决定使用openssl做rsa签名验证。

由于第一次使用openssl做RSA验证签名,我们碰到了各种坑,为了避免其他项目也碰到类似问题,分享如下:


首先要说明的是RSA签名和签名验证的过程。

RSA签名的过程(支付宝操作)如下:对需要签名的字符串按key的字母升序排序,使用=和&连接,形成一个签名字符串。对该字符串做摘要(可以使用MD5或者SHA1,支付宝使用的是SHA1),然后对摘要字符串(即接口中的hash参数)使用支付宝私钥做RSA加密,获得加密字符串,即为签名字符串(放在sign中),设置sign_type=RSA。这样,就完成了发送字符串的签名。

RSA签名验证的过程(我们第三方企业操作)如下:接收到发送过来的字符串(如果字符串没有做url decode解码,需要做url decode解码),拆分为key、value对,按照支付宝的文档,根据key的字母升序排序,使用=和&链接,获得被签名字符串。被签名字符串做SHA1摘要算法,获得SHA1摘要字符串。如果sign_type=RSA,先将sign字段做base64解码,然后使用支付宝公钥做RSA解密,得到SHA1摘要字符串。比较两个SHA1摘要字符串,如果SHA1摘要字符串一致,则签名验证成功。

特别说明的是:支付宝的公钥字符串为以-----BEGIN PUBLIC KEY-----\n开始,以\n-----END PUBLIC KEY-----\n结束,中间的字符串需要每64个字符换行一次,即为:

-----BEGIN PUBLIC KEY----
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知 的相关文章

随机推荐

  • ctfshw (萌新赛)

    目录 萌新记忆 签到题 web 假赛生 0x2f666c6167是 flag得hex编码 用于更改cookie的值 萌新记忆 发现页面都没什么可利用的 尝试访问别的页面 用dirsearch可以扫描出 admin 目录 没错 是扫出目录而不
  • yolov5如何开启和关闭mosaic(马赛克)增强

    总结 将 hyp scratch yaml中的mosaic设置为0 表示关闭马赛克增强
  • 目标检测中的一些评价标准(ACC,Precision,recall,AP,MAP,F1Score,ROC,AUC)

    目标检测中的一些评价标准 ACC Precision recall AP MAP F1Score ROC AUC 介绍这些之前 应该了解一下最基本的TP TN FP FN 先看一下下面这些解释 True positives 简称为TP 即正
  • Qt线程池waitForDone+等待框

    QThreadPool waitForDone 可阻塞线程 采用std function方式将其置于其它线程执行 避免阻塞线程同时可设置等待框 其它线程 生存期 单纯不阻塞线程可以直接不使用waitForDone 一 调用 DlgProce
  • Git技能树(5):分支管理

    Git技能树 5 分支管理 git 分支 几乎所有的版本控制系统都以某种形式支持分支 使用分支意味着你可以把你的工作从开发主线上分离开来 以免影响开发主线 在很多版本控制系统中 这是一个略微低效的过程 常常需要完全创建一个源代码目录的副本
  • 细粒度图像识别算法Mask-CNN 论文笔记

    细粒度图像识别算法Mask CNN 论文笔记 原文 Mask CNN Localizing Parts and Selecting Descriptors for Fine Grained Image Recognition 下载地址 ht
  • ChatGPT 实战:快速了解一个新领域

    前段时间在社区里看到有人在分享 如何用 ChatGPT 麦肯锡方法论洞察一个行业 感觉这个方法在陌生行业的研究上很有帮助 同时我也一直好奇 投资经理在一两周的时间里如何快速了解一个新领域并做出投资决策的 先解决你的第一个疑问 如果你没听过麦
  • 在 Linux 中查找文件的 4 种方式

    Preface 4 种命令方式 locate 系统数据库内部索引 适合找历史数据 全 whereis 所有二进制文件 which 环境变量内的二进制文件 find home type f b c d l name test txt 在哪找什
  • 标准IO函数练习

    一 使用fgets实现计算一个文件有几行 include
  • 数字钟24小时制:Multisim仿真(百度网盘)分享

    图如下 链接 https pan baidu com s 19r3razNjIso 2vYB64FcKA 提取码 vqwx
  • 一文入门Go静态单赋值(SSA)

    在上一篇文章 通过实例理解Go内联优化 1 中 我们探讨了Go编译器在编译中端进行的内联优化 内联优化基于IR中间表示进行 不过Go编译过程不止有一种IR表示 这点和龙书 编译原理 第二版 2 的在第六章 中间代码生成 一开始处的讲解是一致
  • 浪漫七夕

    迢迢牵牛星 皎皎河汉女 这一句古老的诗句 映照着那悠远的星空 千百年来 牛郎织女的爱情传说代代传承 唤起人们对纯真爱情的向往 岁月流转 这段美丽的传说孕育出七夕节 是一个祈福许愿 象征爱情的节日 更是我们中国人专属的情人节 不论是情侣还是夫
  • 基于SSM框架的员工管理系统

    一 视频展示 https www bilibili com video BV1xM4y1K71m 二 基本介绍 1 关键技术 开发工具 IntelliJ IDEA 数据库 MySQL 5 7 前端技术 Jquery Bootstrap JS
  • 7个Facebook营销技巧:让你的产品轻松出圈!

    据统计 当前Facebook的月活跃用户为29 34亿 是全球最为活跃的社交媒体平台 跨境电商卖家利用好这个平台 可以让自己的产品给更多人看到 如果你还不知道怎么才能用好Facebook做营销推广 那就接着往下看吧 加入Facebook群组
  • jQuery将json字符串转换为数组

    简单的jQuery代码片段将JSON字符串转换为对象数组 然后插入其值的输出 var data JQUERY4U DASHBOARD data widgets data parseJSON data each data function i
  • CVPR冠军方案分享

    近日 全球三大计算机视觉顶级会议之一CVPR如期举行 深兰科技DeepBlueAI团队斩获TinyAction Challenge 低分辨率视频行为识别挑战赛 的冠军 TinyAction Challenge是第六届动作识别国际挑战赛系列竞
  • PC市场逆势复苏之路:创新与多元化引领未来

    市场调研机构Canalys数据显示 今年一季度 中国市场整体PC出货量同比下降24 至890万台 已是连续第五个季度下跌 今年截至618结束 都没有一家主要的PC厂商愿意发战报 PC市场怎样走出寒冬 谈谈你的理解和看法 一 2022年下半年
  • hihoCoder_A+B

    A B Problem 描述 求两个整数A B的和 输入 输入包含多组数据 每组数据包含两个整数A 1 A 100 和B 1 B 100 输出 对于每组数据输出A B的和 样例输入 1 2 3 4 5 6 样例输出 3 7 11 inclu
  • Unity鼠标控制3D物体的移动、旋转、缩放

    一 鼠标控制3D物体移动 1 使用协程 using System Collections using System Collections Generic using UnityEngine public class ControlMove
  • 使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知

    由于业务需要 我们需要使用支付宝移动快捷支付做收款 支付宝给了我们 移动快捷支付应用集成接入包支付接口 见支付宝包 WS SECURE PAY SDK 支付宝给的服务器demo只有Java C PHP三种 而我们服务器端使用的是C 这其中就