iOS OTP 基于谷歌身份验证器

iOS OTP (Authenticator)

前言:最近需要做一个生成动态码,类似于QQ安全中心的动态码,30秒更新一次,着手开始调研。

生成的动态码是经过一系列算法生成,用的是谷歌开源的,有兴趣的可以下载研究一下

谷歌身份验证器

逻辑实现:

1、移动端和后台的算法保持一致(我这里就遇到了坑,两边的算法不一致,因为大家都是用的谷歌开源的代码,但生成的动态码就不是30秒之内的,一系列分析最后才找到问题,文章后面说具体遇到的问题)

2、移动端这边根据后台返回的字符串,转为NSData,调用谷歌的公用方法。

3、将生成的动态码反给后台,后台经过算法,解密判断动态码是不是30秒之内的

谷歌具体调用方法:OTPGenerator 和 TOTPGenerator 需要到谷歌源码下载,也可以在文章末尾我的百度网盘中下载关键文件

iOS OTP 基于谷歌身份验证器_第1张图片
OTP
iOS OTP 基于谷歌身份验证器_第2张图片
TOTP

具体的调用方法如下,从网上查到的资料都是用的下面的方法将字符串转为NSData

NSData *secretData = [secret dataUsingEncoding:NSASCIIStringEncoding];

而服务器用的是 base32Decode 的方法,从源码找到这个方法后,但是缺少  

GTMDefines.h        GTMStringEncoding.h      GTMStringEncoding.m   

这里我将苦苦寻找到的文件上传到百度网盘,有需要的可以下载,提取码: ef6s

经过一番寻找,终于找到,加入项目中,把什么release去掉就可以编译了。

谷歌的算法:

iOS OTP 基于谷歌身份验证器_第3张图片
谷歌的算法

这样str得到的就是生成的动态码(屏蔽的代码就是遇到的坑)

iOS OTP 基于谷歌身份验证器_第4张图片
具体调用方法


哦了,到这里就差不多结束了,如有问题,请留言,多指教。

你可能感兴趣的:(iOS OTP 基于谷歌身份验证器)