开发者社区> Java大神> 正文

支付宝支付加密规则梳理,写的太好了!

简介: 前言 支付是一个安全等级很高的场景,系统间交互的每一条数据的泄露都有可能造成及其大的损失。因此支付时系统间交互的每一
+关注继续查看

前言

支付是一个安全等级很高的场景,系统间交互的每一条数据的泄露都有可能造成及其大的损失。因此支付时系统间交互的每一条数据都会采取加密措施。这里梳理一下支付宝支付时用到的加密规则,请大家参考。

一、什么是签名?

image.png

在了解签名前,先回顾一下支付的交互流程。如上图所示,支付的过程中可以大概分为6个步骤。

  1. 用户选择自己的商品提交订单。
  2. 商家服务器将商品信息和所需要的金额发给支付宝,生成支付宝订单。
  3. 支付宝订单返回成功之后生成一个支付页面,方便手机支付或者网页支付。
  4. 手机调起支付宝app进行支付。
  5. 输入支付密码发送给支付宝服务器。
  6. 支付宝服务器转账成功,告知商家服务器某个订单的金额转账成功。

这6个步骤中,最为重要的是步骤2和步骤6 。拆解如下。

image.png

商家服务器和支付宝服务器交互的过程中传输的信息异常敏感,所以,在交互时必须防止中间人对于信息的篡改。例如步骤2将商品的金额改为0,支付宝就误认为是转账0元。   数字签名解决了交互时这一安全问题。它可以验证一条消息或者文档的真实性。在支付宝支付的接口中,有一个sign参数用来填写签名。这个签名作用是为了防止信息伪造 。通过这种方式可以有效的防止消息在传递过程中被篡改。

二、签名实现原理

2.1 签名原理

数字签名是一个信息安全的保障,它的实现依赖于双方系统的密钥签名过程如下:

  1. 计算希望签名的文档的散列。不论输入文档的长度如何,输出长度总是固定的。比如,使用SHA256就是256位。
  2. 对结果散列和一些额外的元数据进行编码。比如,接收方需要知道你使用的散列算法,否则不能处理签名。
  3. 使用私钥加密编码过的数据,其结果就是签名,可以追加到文档中作为身份验证的依据。

image.png

验证签名(验签):接收方接收文档并使用相同的散列算法独立计算文档散列。接着,她使用公钥对消息进行解密,将散列解码出来,再确认使用的散列算法是否正确,解密出的散列是否与本地计算的相同。

image.png

2.2 非对称加密

支付宝采用RSA非对称加密对信息进行签名 。非对称加密是由一个公钥和一个私钥组成,一般代码中命名为public keyprivate key。非对称加密的特点是:私钥加密的信息只有公钥才能解密,公钥加密的信息只能有私钥才能解密。一般会将私钥进行保留,开发时一般会放在配置文件中,安全级别和数据库账号密码一样。公钥会交给其它系统,这样系统间交互时中间人不知道密钥的情况下,是无法破解交互的信息的。发送方只要保证私钥不泄露,任何人发送给接收方的信息在签名验证时都无法匹配成功。   支付宝的实现签名的方式也大致如此,支付宝在信息交互的时候两个很重要的名词支付宝公钥应用公钥,这两个秘钥总是让人混淆。这是因为支付宝提供了两套RSA加密。一套是用来保证步骤2统一下单接口时的信息安全,另一套是用来保证步骤6回调时的信息安全。如下图,步骤2商户服务器通过红色应用私钥(priv key 2)计算签名,支付宝通过红色应用公钥(pub key 2)进行验签;步骤6支付宝服务器通过蓝色支付宝私钥(priv key 6)计算签名,商家通过蓝色支付宝公钥(pub key 6)验证签名。

image.png

了解了签名计算原理之后,再去管理平台设置app信息的时候就游刃有余了,我以沙箱环境为例子。

image.png

   如上图,说明使用RSA2加密方式,HASH算法采用SHA256。进入设置之后要设置应用公钥和保存支付宝公钥

  • 应用公钥和应用私钥 这两个需要自己生成一对,保证步骤2 的安全。生成方式跳转支付宝开放平台开发助手
  • 支付宝公钥和支付宝私钥 是支付宝提供的,私钥支付宝自己保留的,和自己服务器的应用私钥一样,人家不会提供出来。公钥复制下来用于在回调时进行签名的认证。

image.png

三、对称加密

签名虽然可以防止中间人的信息篡改,但是无法防止中间人信息查看 。比如步骤2 中,向支付宝发送的商品金额,中间人即可获取每天中该商家交易的金额。信息在网络中传输感觉是一个虚无缥缈的过程,网络中信息有可能被不法分子进行拦截。

image.png

因此在支付的过程中,会推荐使用https协议进行交互,使得交互的信息加密传输。而且,支付宝的很多接口还支持使用AES加密之后进行传输,使得信息更加安全。    AES加密是一种对称加密算法,对称加密算法相对于非对称加密要简单一点。系统间只存在一个密钥,这个密钥可以用来加密也可以用来解密。在与支付宝交互的信息可以通过AES加密。防止信息的泄露,官方对接口的解释如下:

若 OpenAPI 无 bizContent 传参则无法使用 AES 密钥加密,否则会报错 当前 API 不支持加密请求。例如:alipay.user.info.share(支付宝会员授权信息查询接口)未使用 bizContent 传参则无法使用 AES 密钥加密。

四、AES和RSA关系

image.gif

  • AES 密钥是对接口请求和响应内容进行加密,密文无法被第三方识别,从而防止接口传输数据泄露。
  • RSA 密钥是对接口请求和响应内容进行签名,开发者和支付宝开放平台分别加签验签,以确认接口传输的内容没有被篡改。不论接口内容是明文还是密文,RSA 均可正常签名。
  • 开发者可对请求参数先做 AES 加密,然后对密文进行 RSA 签名。

读到这里了,如果对你有帮助就留个赞吧。

  • 前言
  • 一、什么是签名?
  • 二、签名实现原理
    • 2.1 签名原理
    • 2.2 非对称加密
  • 三、对称加密
  • 四、AES和RSA关系

前言

支付是一个安全等级很高的场景,系统间交互的每一条数据的泄露都有可能造成及其大的损失。因此支付时系统间交互的每一条数据都会采取加密措施。这里梳理一下支付宝支付时用到的加密规则,请大家参考。

一、什么是签名?

image.pngimage.png

在了解签名前,先回顾一下支付的交互流程。如上图所示,支付的过程中可以大概分为6个步骤。

  1. 用户选择自己的商品提交订单。
  2. 商家服务器将商品信息和所需要的金额发给支付宝,生成支付宝订单。
  3. 支付宝订单返回成功之后生成一个支付页面,方便手机支付或者网页支付。
  4. 手机调起支付宝app进行支付。
  5. 输入支付密码发送给支付宝服务器。
  6. 支付宝服务器转账成功,告知商家服务器某个订单的金额转账成功。

这6个步骤中,最为重要的是步骤2和步骤6 。拆解如下。

image.png

商家服务器和支付宝服务器交互的过程中传输的信息异常敏感,所以,在交互时必须防止中间人对于信息的篡改。例如步骤2将商品的金额改为0,支付宝就误认为是转账0元。   数字签名解决了交互时这一安全问题。它可以验证一条消息或者文档的真实性。在支付宝支付的接口中,有一个sign参数用来填写签名。这个签名作用是为了防止信息伪造 。通过这种方式可以有效的防止消息在传递过程中被篡改。

二、签名实现原理

2.1 签名原理

数字签名是一个信息安全的保障,它的实现依赖于双方系统的密钥签名过程如下:

  1. 计算希望签名的文档的散列。不论输入文档的长度如何,输出长度总是固定的。比如,使用SHA256就是256位。
  2. 对结果散列和一些额外的元数据进行编码。比如,接收方需要知道你使用的散列算法,否则不能处理签名。
  3. 使用私钥加密编码过的数据,其结果就是签名,可以追加到文档中作为身份验证的依据。
  4. image.png

验证签名(验签):接收方接收文档并使用相同的散列算法独立计算文档散列。接着,她使用公钥对消息进行解密,将散列解码出来,再确认使用的散列算法是否正确,解密出的散列是否与本地计算的相同。

image.png

2.2 非对称加密

支付宝采用RSA非对称加密对信息进行签名 。非对称加密是由一个公钥和一个私钥组成,一般代码中命名为public keyprivate key。非对称加密的特点是:私钥加密的信息只有公钥才能解密,公钥加密的信息只能有私钥才能解密。一般会将私钥进行保留,开发时一般会放在配置文件中,安全级别和数据库账号密码一样。公钥会交给其它系统,这样系统间交互时中间人不知道密钥的情况下,是无法破解交互的信息的。发送方只要保证私钥不泄露,任何人发送给接收方的信息在签名验证时都无法匹配成功。   支付宝的实现签名的方式也大致如此,支付宝在信息交互的时候两个很重要的名词支付宝公钥应用公钥,这两个秘钥总是让人混淆。这是因为支付宝提供了两套RSA加密。一套是用来保证步骤2统一下单接口时的信息安全,另一套是用来保证步骤6回调时的信息安全。如下图,步骤2商户服务器通过红色应用私钥(priv key 2)计算签名,支付宝通过红色应用公钥(pub key 2)进行验签;步骤6支付宝服务器通过蓝色支付宝私钥(priv key 6)计算签名,商家通过蓝色支付宝公钥(pub key 6)验证签名。

image.png

了解了签名计算原理之后,再去管理平台设置app信息的时候就游刃有余了,我以沙箱环境为例子。

image.png

   如上图,说明使用RSA2加密方式,HASH算法采用SHA256。进入设置之后要设置应用公钥和保存支付宝公钥

  • 应用公钥和应用私钥 这两个需要自己生成一对,保证步骤2 的安全。生成方式跳转支付宝开放平台开发助手
  • 支付宝公钥和支付宝私钥 是支付宝提供的,私钥支付宝自己保留的,和自己服务器的应用私钥一样,人家不会提供出来。公钥复制下来用于在回调时进行签名的认证。

image.png

三、对称加密

签名虽然可以防止中间人的信息篡改,但是无法防止中间人信息查看 。比如步骤2 中,向支付宝发送的商品金额,中间人即可获取每天中该商家交易的金额。信息在网络中传输感觉是一个虚无缥缈的过程,网络中信息有可能被不法分子进行拦截。

image.png

因此在支付的过程中,会推荐使用https协议进行交互,使得交互的信息加密传输。而且,支付宝的很多接口还支持使用AES加密之后进行传输,使得信息更加安全。    AES加密是一种对称加密算法,对称加密算法相对于非对称加密要简单一点。系统间只存在一个密钥,这个密钥可以用来加密也可以用来解密。在与支付宝交互的信息可以通过AES加密。防止信息的泄露,官方对接口的解释如下:

若 OpenAPI 无 bizContent 传参则无法使用 AES 密钥加密,否则会报错 当前 API 不支持加密请求。例如:alipay.user.info.share(支付宝会员授权信息查询接口)未使用 bizContent 传参则无法使用 AES 密钥加密。

四、AES和RSA关系

image.png

  • AES 密钥是对接口请求和响应内容进行加密,密文无法被第三方识别,从而防止接口传输数据泄露。
  • RSA 密钥是对接口请求和响应内容进行签名,开发者和支付宝开放平台分别加签验签,以确认接口传输的内容没有被篡改。不论接口内容是明文还是密文,RSA 均可正常签名。
  • 开发者可对请求参数先做 AES 加密,然后对密文进行 RSA 签名。

读到这里了,如果对你有帮助就留个赞吧

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9524 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
13174 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20203 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
33172 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18471 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
34978 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24977 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
11801 0
+关注
1789
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载