Google Authenticator验证java服务端代码问题?(已解决)

用Google Authenticator来做验证,网上能找到的能用的代码基本上都是抄来抄去同一份,比如这个博客里的代码:http://blog.csdn.net/Mr_Smile...
但是我发现这个代码有个问题,就是验证的时候返回的6位数字是long型的,但是谷歌验证器其实是会返回开头是0的6位数的,但是看了验证的方法都是用long型来存储返回值,特别是在verify_code方法里计算出的hash是用long存储的,感觉这样不可能算出不知道怎么样改造成用string来返回,long型的code根本没法存入一个0开头的6位数字,有没有人有做过这个验证功能的,怎么实现用string类型来验证code?

阅读 4.4k
2 个回答

验证的时候可用string类型传入,直接转long型后再比较久行了,谷歌验证器里显示的6位数字出现0开头是显示的时候自动补全的,其实计算出来的是5位的数字

TOTP 算法生成的其实是一个整型的 hash (类似哈希运算),只不过如果位数不够前面补零处理,所以将这个 6 位的字符串转为 long 验证也是可以的。另外其实生成算法就是验证算法类似:gen(key) == code

算法详见:https://tools.ietf.org/id/dra...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进