- HOTP:计数器验证
- TOTP:时间戳验证
算法公式
HS = HMAC-SHA-1(K,C)
DT(HS)//相当于算法分析2-5步
K:秘钥,客户端和服务端都知道,其他第三方不知道
C:在HOTP里面属于计数器
在TOTP里面属于时间戳
算法分析
- 通过K和C生成一个容量为20的byte数组,byte[] a;
- 取最后数组a的最后一位,和0xF相余,也就是取最后一位的低四位,作为偏移量
- 取偏移量开始的第一个整形字节
- 将第三部取得的整形自己与0x7FFFFFFF相&,&完就相当于取后31位
- 将第四部的值模除10^6,就会得到6位验证码
//第一步
byte[] hash = signer.sign(challenge);
//第二步
int offset = hash[hash.length - 1] & 0xF;//取数组最后一个字节的低四位作为偏移量
//第三步,