前言
支付宝作为国内第一的第三方支付平台,安全的重要性不言而喻了,下面主要对密钥做一个简单的介绍和升级流程。
介绍
SHA-1与SHA-2
SHA代表安全哈希算法。SHA-1和SHA-2是该算法不同的两个版本,它们的构造和签名的长度都有所不一样,但可以把SHA-2理解为SHA-1的继承者。
首先,人们一般把哈希值位数长度作为重要的区别,SHA-1是160位的哈希值,而SHA-2是组合值,有不同的位数,其中最受欢迎的是256位。
公钥和私钥
公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。
公钥和私钥是成对出现的,我们会保留有自己的私钥,同时公开自己的公钥。一个很典型的例子是GitHub的使用。我们通常不会使用账号密码来管理自己的项目,而是通过将自己的公钥上传到GitHub的里,而自己的电脑里则保留有相对应的私钥,从而达到免密码提交代码。
当然私钥和公钥对是唯一的,而你也可以随时重新生成自己的公钥和私钥密码对,但当你从新生成密钥对并覆盖了就有的密钥时,你之前的公钥就作废了。
简单来说就是:公钥加密,私钥解密,私钥签名,公钥验证。
升级
蚂蚁金服开放平台接口签名方式升级,由此前的RSA(SHA1)升级为RSA(SHA256),请按照以下步骤来完成升级:
- 生成RSA2密钥(详情查看如何生成密钥,可下载支付宝提供的密钥生成工具,选择2048来生成密钥即可);
- 请把生成的商户公钥上传给支付宝,详情请查看如何上传商户公钥并换取支付宝公钥;
- 在调支付宝接口传参数的时候把sign_type的值改成 RSA2,私钥请使用步骤1生成的RSA2私钥;
注意事项:验签的时候支付宝公钥需要改成可配置的,因为RSA2的支付宝公钥每个商户都不一样,不能统一默认。
把生成好的公钥上传到支付宝后台,会自动生成支付宝公钥。注意,此公钥非彼公钥,是两个不同的东西。
这里两种签名方式可以共存,互不影响,只要保证公钥私钥一致即可。
代码升级
如果是当面付,也就是扫码支付,需要重新下载alipay-trade-sdk,并在配置zfbinfo.properties参数中增加以下参数:
# 签名类型: RSA->SHA1withRsa,RSA2->SHA256withRsa
sign_type = RSA2
如果是PC或者手机支付,只需要在创建AlipayClient传入RSA2即可:
AlipayClient alipayClient = new DefaultAlipayClient(
Configs.getOpenApiDomain(), Configs.getAppid(),
Configs.getPrivateKey(), "json", "UTF-8",
Configs.getAlipayPublicKey(),"RSA2");
项目源码
支付宝,微信,银联详细代码案例:
https://gitee.com/52itstyle/spring-boot-pay