身边的高 科技 如果你习以为常了,你就会觉得理所应当,但是如果有人深究起来,问你这高 科技 里面到底是什么原理,大部分人还真答不上来,就像支付宝离线付款技术。
最近和同事闲聊,聊到了支付宝离线付款的问题,同事显然对这项技术显得有点不可理解,他的疑问我总结起来主要是这个:
笔者不是支付宝的工作人员,更不是数学或者计算机领域的专家,讲不出那么多高深莫测的专业知识,对这方面知识只是“略懂略懂”。但这也正是笔者的优势所在啊,正因为“略懂”,才使得笔者只能用一种平易近人通俗易懂的语言给大家解释这种 科技 。
笔者试图截一个支付宝的付款码的图,发现支付宝提示“无法抓取截图”,可能是为了安全考虑特意禁止。笔者就只好截了一个微信付款码的图(和支付宝付款码的原理是一样的),大家用扫码工具扫一下就会发现, 它其实就是一串很长的数字 ,大概1分钟就变化一次。
我们把离线付款的过程仔细的回想一下:商家在收款系统里设置好金额——我们打开支付宝——出示付款码——商家扫码——过了几秒钟商家收到信息“付款成功”。这整个过程用户都没有输入过付款金额。既然没有付款信息, 那付款码里应该就只有用户的账号信息了 。
付款码里只有用户的账号信息,但是 用户的账号信息应该固定的,然而二维码里隐藏的数字却是随时间变化的 。那该如何做到这一点呢?
这一点也很简单啊,用我们固定的账号信息去和一个随时间变化的数字序列做运算就行了。笔者这里做了一个简单的用户信息加密方案:
1、我们的账户信息就是“123”,支付宝服务器需要的就是这个信息。
2、用户在当初刚在手机上装支付宝APP的时候就和支付宝的服务器约定了 数字序列 规则:201812281201分的时候数字序列的值为1,每过1秒数字序列的值加2
3、那我们的账户信息“123”来 乘以当前时间数字序列的值 ,得到一个随时间变化的包含账户信息的数字串,用这个数字串做个二维码,就成了“付款码”。
4、支付宝服务器通过商家的网络得到了用户的二维码信息,那它只用那二维码里的数字串和当前时间数字序列的值作个反向运算就得到用户的账户信息啦。
这个付款码隐藏用户信息的方法似乎太过低劣了,规律太容易找,随便就能被人破解。但是这就是支付宝付款码的秘密,就是这么简单。
下面的问题就是找一个更好的数字序列来和用户的账号信息作运算,这个数字序列应该有一个公式可循,数字序列里数字又似乎是随机的、找不到任何规律,这样才能真正的隐藏用户的账号信息。
数学上还真存在这样一个数字序列,它就有三个优点,恰好是离线支付所需要的三个条件:
1、这个数字序列有一个公式,约定一个初始值和一个开始时间,通过公示就得得到任意时间点的值。
2、这个数字序列里的那些数字根本没规律可循,看起来就像是随机的。
3、在相同的公式下,用不同的初始值,得到的数字序列根本不存在平移关系。
第三点怎么理解呢,假设公式很简单,初始值是1每次加2,得到的数字序列就是 1、3、5、7;如果初始值为2每次加2,得到的序列就是2、4、6、8。两个序列之间就是有平移关系的。
笔者在读书的研究过一个叫做“混沌映射”的数字序列,它就是一个这样的牛❌的数字序列。你不用懂这些复杂的数字序列是怎么来的,只需要知道有这么个数字序列并且有三个优点就行了。
笔者很直接的告诉你,几乎不能破解。付款码的保密性就是依赖于这个牛❌的数字序列,只要在安装支付宝APP时和支付宝服务器约定的初始值不泄露,那就根本不可能破解这个数字序列。
如果是用1、3、5、7这样的数字序列来隐藏账户信息,那接下来的值很容易就破解了,那就是9。
但是本文中介绍的那种牛❌数字序列是不可能破解的, 即使知道公式和后面某几个时间上的值,你也得不到后面将会出现的数值。
1手机解锁后,在主题界面点击打开支付宝APP。
2进入支付宝界面后,点击右下角的我的选项。
3进入支付宝我的界面后,点击最底部的去商家版选项。
4切换到商家版后,点击商家服务选项。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)