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