支付宝支付密钥RSA1升级到RSA2


前言

支付宝作为国内第一的第三方支付平台,安全的重要性不言而喻了,下面主要对密钥做一个简单的介绍和升级流程。

介绍

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的支付宝公钥每个商户都不一样,不能统一默认。

把生成好的公钥上传到支付宝后台,会自动生成支付宝公钥。注意,此公钥非彼公钥,是两个不同的东西。

这里两种签名方式可以共存,互不影响,只要保证公钥私钥一致即可。

代码升级

如果是当面付,也就是扫码支付,需要重新下载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

爪哇笔记

作者: 小柒

出处: https://blog.52itstyle.vip

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。