模拟银行动态口令生成

  1. 原理

如今动态口令算法采用一次性口令算法,即OTPOTP(One-Time Password Algorithm), 银行使用的动态口令令牌使用的算法是OTPOTP中的一种类型,称之为:TOTPTOTP(Time-Based One-Time Password Algorithm) — 时间同步型动态口令。


动态口令动态口令生成与时间有关系,绘制一个简单的原理图如下:

这里写图片描述


用户端我们有一个内置加密算法的动态令牌,初始密钥和当前时间因子共同作为加密算法的参数进行加密得到伪随机数,然后截取其中特定六位作为令牌产生的6位动态口令。

服务器端与用户端共享初始密钥,以及通过网络时间同步的方式获取相同的时间因子,并采用同一种加密算法得到相应伪随机数,最后通过与用户端采用相同的剪裁方式得到6位口令,最后进行验证,以便提供正确的服务。

2.模拟

在此提供一种编程思路:
初始化一个密钥Key)(Key),程序获取当前系统时间并转换为以分钟为单位的时间因子TT,形如201701011920201701011920代表2017年01月01日19时20分,将KeyKeyTT做拼接然后调用一个MD5MD5加密算法得到一个值(Byte类型),然后将Byte类型值每一个Byte转为相应十进制值,并将得到的所有十进制数作
拼接得到伪随机数RR,最后取R的前六位作为动态口令。注意设置60s60s即一分钟的定时器,因为口令只维持一分钟,然后随机产生。

分别在客户端(可用APP实现)与服务器端(可用网页实现)实现相同的算法,即可完成验证。