azl397985856/fe-interview

【每日一题】- 2019-12-20 - 支付宝,微信在没网络的情况下还能支付,是如何实现的?需要什么支持?

Closed this issue · 1 comments

【每日一题】- 2019-12-20 - 支付宝,微信在没网络的情况下还能支付,是如何实现的?需要什么支持?

OTP

以下解释来自wikipedia https://zh.wikipedia.org/wiki/%E4%B8%80%E6%AC%A1%E6%80%A7%E5%AF%86%E7%A2%BC

OTP(one-time-password)又称一次性密码,又称动态密码或单次有效密码,是指计算机系统或其他数字设备上只能使用一次的密码,有效期为只有一次登录会话或交易。OTP 避免了一些与传统基于(静态)密码认证相关系的缺点;一些实现还纳入了双因素认证,确保单次有效密码需要访问一个人有的某件事物(如内置 OTP 计算机的小钥匙挂件设备)以及一个人知道的某件事物(如 PIN)。

离线流程

离线支付的大体过程:

    1. 生成付款码。手机向服务端申请token,支付宝生成后,将token给手机。 由于算法已经内置在客户端,因此即使在离线下,也可以根据算法以及时间戳和token可以生成一串数字,生成付款码。
    1. 付款时,因为商家的网络是连接的,所以商家读取了用户生成的付款码后,可以将其上传到服务器。对比商家传来的信息,服务端也会有对应的算法。 如果发现不一致,就支付失败;

上述对比的逻辑原理是动态口令,其实很多软件都在使用。其是根据专门的算法在每隔一段时间生成一个口令。通过特定的事件次序及相同的token作为输入,在HASH算法中获得相同密码。

总结

  1. 离线支付是可以实现的,并且不难
  2. 但是想做到安全就很难。 如果客户端算法被攻破,那么是不是就意味者你可以刷别人的钱?