从零玩转系列之微信支付安全

简介: 从零玩转系列之微信支付安全

一、前言

作者: 杨不易呀

halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端)

  • 第一章从零玩转系列之微信支付开篇
  • 第二章从零玩转系列之微信支付安全
  • 第三章从零玩转系列之微信支付实战基础框架搭建
  • 第四章从零玩转系列之微信支付实战PC端支付下单接口搭建
  • 第五章从零玩转系列之微信支付实战PC端支付微信回调接口搭建
  • 第六章从零玩转系列之微信支付实战PC端支付微信取消订单接口搭建
  • 第七章从零玩转系列之微信支付实战PC端支付微信退款订单接口搭建
  • 第八章从零玩转系列之微信支付实战PC端项目构建Vue3+Vite+页面基础搭建
  • 第九章从零玩转系列之微信支付实战PC端装修下单页面
  • 第十章从零玩转系列之微信支付实战PC端装修我的订单下单页面
  • 第十一章从零玩转系列之微信支付实战PC端我的订单接入退款取消接口
  • 第十二章从零玩转系列之微信支付实战Uni—App基础项目搭建

二、微信支付安全(证书/秘钥/签名)

1. 信息安全的基础 - 机密性

**明文:**加密前的消息叫“明文”(plain text)

**密文:**加密后的文本叫“密文”(cipher text)

**密钥:**只有掌握特殊“钥匙”的人,才能对加密的文本进行解密,这里的“钥匙”就叫做“密钥”(key)

“密钥”就是一个字符串,度量单位是“位”(bit),比如,密钥长度是 128,就是 16 字节的二进制串

**加密:**实现机密性最常用的手段是“加密”(encrypt)

按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密。

**解密:**使用密钥还原明文的过程叫“解密”(decrypt)

**加密算法:**加密解密的操作过程就是“加密算法”

所有的加密算法都是公开的,而算法使用的“密钥”则必须保密

2. 对称加密和非对称加密

对称加密

  • 特点:只使用一个密钥,密钥必须保密,常用的有 AES算法优点:运算速度快
  • 缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息会被破解,无法做到安全的密钥交 换
  • 优点:运算速度快
  • 缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息会被破解,无法做到安全的密钥交 换

非对称加密

  • 特点:使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,常用的有 RSA、SM2
  • 优点:黑客获取公钥无法破解密文,解决了密钥交换的问题
  • 缺点:运算速度非常慢

混合加密

  • 实际场景中把对称加密和非对称加密结合起来使用

3.身份认证

  • 公钥加密, 私钥解密的作用是加密信息
  • 私钥加密,公钥解密的作用是身份认证

4.摘要算法(Digest Algorithm)

摘要算法就是我们常说的散列函数、哈希函数(Hash Function),它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。

作用:

保证信息的完整性

特性:

不可逆:只有算法,没有秘钥,只能加密,不能解密

  • 难题友好性:想要破解,只能暴力枚举
  • 发散性:只要对原文进行一点点改动,摘要就会发生剧烈变化
  • 抗碰撞性:原文不同,计算后的摘要也要不同

常见摘要算法:

MD5、SHA1、SHA2(SHA224、SHA256、SHA384)

5.数字签名

数字签名是使用私钥对摘要加密生成签名,需要由公钥将签名解密后进行验证,实现身份认证和不可否 认

签名和验证签名的流程

39d6b8a6d61e9a547f144b264c641a4.png

6.数字证书

数字证书解决“公钥的信任”问题,可以防止黑客伪造公钥。

不能直接分发公钥,公钥的分发必须使用数字证书,数字证书由CA颁发 HTTPS 协议中的数字证书

ded2b12eb79cbdec7b8020e302e835f.png

7.微信APIv3证书

商户证书:

商户API证书是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。

商户证书在商户后台申请:点我前往申请获取商户证书

972c8d440f105b301399ba00620fb39.png

8. ⚠️ 平台证书(微信支付平台)

微信支付平台证书是指由微信支付 负责申请的,包含微信支付平台标识、公钥信息的证书。商户可以使用平台证书中的公钥进行验签。

平台证书的获取:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_0.shtml

后续Native模式通过WechatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新我们就先不需要下载这个微信平台证书,后续JSAPI需要下载(使用了国内顶级开源项目来操作它没有默认处理所以你懂的…)

证书下载参考: https://github.com/wechatpay-apiv3/CertificateDownloader

9. ⚠️ API密钥和APIv3密钥

都是对称加密需要使用的加密和解密密钥,一定要保管好,不能泄露。

API密钥对应V2版本的API

APIv3密钥对应V3版本的API



相关文章
|
9月前
|
小程序 算法 API
小程序微信支付
微信小程序支付是一种常见的支付方式,实现起来相对较为复杂。在实现微信小程序支付功能时,需要认真阅读微信支付开发文档,严格遵守微信支付规范,确保支付过程的安全性和可靠性。希望这篇分享能够帮助开发者了解微信小程序支付相关的技术和注意事项,为开发微信小程序支付功能提供帮助。
156 0
|
9月前
|
移动开发 安全 前端开发
〔支付接入〕微信的 h5 支付和 jsapi 支付
学会微信支付,打开你的财富之门
209 2
〔支付接入〕微信的 h5 支付和 jsapi 支付
|
XML 移动开发 JavaScript
【畅购商城】微信支付模块之微信支付二维码
【畅购商城】微信支付模块之微信支付二维码
152 0
【畅购商城】微信支付模块之微信支付二维码
|
XML 前端开发 Dubbo
微信支付的两种模式,扫码支付
微信支付的两种模式,扫码支付
843 0
|
机器学习/深度学习
关于支付宝/微信免签实现个人支付
最近一直在了解关于个人支付的问题。由于之前一直想实现个人支付,但是目前微信和支付宝的支付接口都需要企业或个体户资质,导致没办法实现,无奈只能走向这个道路。 说是免签,实际上就是拿到收款金额来做些事情。
关于支付宝/微信免签实现个人支付
|
JavaScript
微信支付案例
微信支付案例
252 0
微信支付案例
如何在微信中使用支付宝手机网站支付
目前微信已经拦截了所有在微信内调用支付宝支付的途径,故无法直接唤起支付宝。 但您可以借助点击右上角的通过浏览器打开的方式,来试着打开支付宝。  更多详见“快速接入”部分的微信公众平台无法使用支付宝收付款的解决方案。
623 0
|
XML Java 数据格式
关于微信支付和支付宝支付java实现
目前支付宝支付和微信支付是算是目前app的标配了 支付宝支付在更新过后有了官方专门的sdk和demo,所以相对而言比较简单,而微信支付稍微复杂一点,下面的文章会附实例代码,微信支付也是参考的github上的某位大神级人物的代码。
1169 0
|
Web App开发 移动开发 前端开发
微信H5支付
本篇文件来聊聊微信服务商模式以及商户模式下微信H5支付 先说一个事情。8月1号开始微信公众平台支付的开发配置页面迁移至商户平台 详细说明参考这个或者看下面的截图 官方文档 普通商户版-微信H5支付 服务商版-微信H5支付 1、申请开通微信H5支付 服务商模式下点击申请开通会立即开通,邀请子商户时需要填写子商户的信息。
4414 0