二维码支付这些年发展的如火如荼,前两年在另外一个站上也大致分析过二维码支付的原理,年底摸摸鱼,重新整理一下吧。
(说实话我很讨厌有的人借着学习的名义把博客上的文章抄来抄去)
1、数字支付码
数字支付码就是打开微信和支付宝付款界面的那串玩意,通过数字找到对应账户,再从账户里扣钱,就这么一回事。
看起来很简单,实际上这里面的过程就非常复杂了。
大致上要解决的问题有这么几个:
a.随机性
b.识别性
c.可用性
d.安全性
首先,随机性就意味着生成的结果必须是离散的,如果按照序列变化,很容易就会被穷举出来;
其次,识别性就要求通过一串数字能很快的找到对应的账户,这就要求对数据的处理时间不能太长太多;
然后,可用性是说在网络不好的情况下,要允许客户端生成离线序列,不影响支付的可用性;
最后,安全性不说都知道了,要保证一码一账户,不能随便被人随时随地造一个有效的出来;
目前网络上讨论的不外乎两种方案:
第一种,直接生成支付码下发给客户端,完整存储数字序列。但是这依赖着服务端,如果有效期过长会有安全问题,如果有效期太短,又会对数据处理有压力,更可怕的是用户数量上去了,这个量就是一个天文数字。
第二种,基于时间的TOTP算法,但是纯粹这种算法是不能直接识别账户来源的,也就意味着要把所有用户的密钥全部计算一遍才可能知道是谁的,这个数据量,估计算到一半前面的就都过期了。
其实以上的思路都是对的,如果结合在一起就基本上就是实现方案了。
大致上就目前市面上的付款码而言,前1-2位是用于标识这是什么机构的标识头,这是为了方便聚合支付厂商定的,也可以过滤掉非本系统的支付码,例如微信是1开头的,支付宝是2开头的,银联的云闪付是62开头的,这就有些跑马圈地的意思了。未来可以预期的是国家会对这个出国标,不然地圈完了,别人就没法玩了,参考卡bin之类的。
除了标识头以外,接下来的部分大概会分成前半部的【toke

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

6992

被折叠的 条评论
为什么被折叠?



