二维码支付码的工作原理那点事

本文探讨了二维码支付码的工作原理,包括数字支付码的随机性、识别性、可用性和安全性问题。介绍了目前的两种主要方案:直接生成支付码和基于TOTP算法的支付码,并分析了各自的优缺点。重点讲解了如何通过标识头、token和应答值实现用户识别和鉴权,确保支付的安全性和离线可用性。此外,还简单提及了离线支付码的实现,类似公交卡的原理,使用预充值或离线计费方式。

二维码支付这些年发展的如火如荼,前两年在另外一个站上也大致分析过二维码支付的原理,年底摸摸鱼,重新整理一下吧。

(说实话我很讨厌有的人借着学习的名义把博客上的文章抄来抄去)

1、数字支付码

数字支付码就是打开微信和支付宝付款界面的那串玩意,通过数字找到对应账户,再从账户里扣钱,就这么一回事。

看起来很简单,实际上这里面的过程就非常复杂了。

大致上要解决的问题有这么几个:

a.随机性

b.识别性

c.可用性

d.安全性

首先,随机性就意味着生成的结果必须是离散的,如果按照序列变化,很容易就会被穷举出来;

其次,识别性就要求通过一串数字能很快的找到对应的账户,这就要求对数据的处理时间不能太长太多;

然后,可用性是说在网络不好的情况下,要允许客户端生成离线序列,不影响支付的可用性;

最后,安全性不说都知道了,要保证一码一账户,不能随便被人随时随地造一个有效的出来;

目前网络上讨论的不外乎两种方案:

第一种,直接生成支付码下发给客户端,完整存储数字序列。但是这依赖着服务端,如果有效期过长会有安全问题,如果有效期太短,又会对数据处理有压力,更可怕的是用户数量上去了,这个量就是一个天文数字。

第二种,基于时间的TOTP算法,但是纯粹这种算法是不能直接识别账户来源的,也就意味着要把所有用户的密钥全部计算一遍才可能知道是谁的,这个数据量,估计算到一半前面的就都过期了。

其实以上的思路都是对的,如果结合在一起就基本上就是实现方案了。

大致上就目前市面上的付款码而言,前1-2位是用于标识这是什么机构的标识头,这是为了方便聚合支付厂商定的,也可以过滤掉非本系统的支付码,例如微信是1开头的,支付宝是2开头的,银联的云闪付是62开头的,这就有些跑马圈地的意思了。未来可以预期的是国家会对这个出国标,不然地圈完了,别人就没法玩了,参考卡bin之类的。

除了标识头以外,接下来的部分大概会分成前半部的【toke

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值