微信支付如何验证签名的?

问题引入:

客户端生成签名的时候,根据appid、时间戳、随机字符串、prepay_id四个参数来生成?疑问来了?微信支付并不知道我的随机字符串,那么它如何生成一样的签名呢?

答:随机字符串并不参与解密。随机字符串的两个作用如下:

1、确保每次请求的签名是唯一的,从而防止重放攻击。

2、增加签名的一致性,使得攻击者很难猜测或者伪造一个有效的签名。

微信支付服务验证签名有效性的流程:

微信支付服务验证签名有效性的流程:

1、客户端生成签名

  • 客户端按照约定的规则构造签名串,包括appid时间戳随机字符串prepay_id等参数。
  • 将这些参数按字典序排序,并拼接成字符串。
  • 在拼接后的字符串末尾加上一个密钥(secret key)。
  • 使用HMAC-SHA256算法对字符串进行加密,生成签名。

2、发送请求

  • 客户端将生成的签名与请求参数一起发送给微信支付服务器。

3、微信支付服务器验证签名

  • 微信支付服务器接收到请求后,按照相同的规则重新构造签名串(简单说就是把appid时间戳随机字符串prepay_id拼接成字符串)。
  • 微信支付服务器使用相同的密钥和HMAC-SHA256算法,对重新构造的签名串进行加密,生成一个新的签名。
  • 微信支付服务器将新生成的签名与请求中的签名进行比对,如果一致,则验证通过。

关键点

  • 密钥(secret key)
    • 密钥是客户端和服务器之间共享的,只有双方知道。
    • 微信支付服务器使用相同的密钥来重新生成签名,因此不需要知道具体的随机字符串内容。
  • 签名验证的原理
    • 签名验证的原理是基于密钥的对称加密算法(如HMAC-SHA256)。
    • 只要密钥和算法一致,生成的签名就会一致,从而验证请求的完整性和真实性。
  • 签名和签名方式
    • 签名可以简单理解成加密。签名方式可以简单理解成加密方式。

(>ω<)喵洞:

小程序调起支付标签 官方地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值