iOS开发技术分享iOS第三方库程序员

iOS 动态口令,动态密码生成(OTP)

2016-12-08  本文已影响1153人  小虎哥

简单的DEMO实现

Snip20161208_9.png

这里用的是Google的开源代码 用到了OTPGenerator和TOTPGenerator两个类

实现方案:客户端跟服务器端必须需要统一的Secret,加密算法(algorithm),统一的时间(基于时间戳,这里可以设置容错时间)

- (id)initWithSecret:(NSData *)secret
           algorithm:(NSString *)algorithm
              digits:(NSUInteger)digits
              period:(NSTimeInterval)period;
- (NSString *)generateOTPForDate:(NSDate *)date;//生成的动态码
//这里的date需要跟服务器一致 (这里time我使用了随机数,为了生成不同动态码)
- (NSString *)addOTPWithTimeLag:(NSInteger)time {
    NSData *secretData = [secret dataUsingEncoding:NSASCIIStringEncoding];
    TOTPGenerator *generator = [[TOTPGenerator alloc]         initWithSecret:secretData
                                  algorithm:kOTPGeneratorSHA1Algorithm
                                     digits:6
                                     period:60];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:time];
    NSString *str = [generator generateOTPForDate:date];
    while (str.length < 6) {
        str = [NSString stringWithFormat:@"0%@",str];
    }
    return str;
}

具体实现看XHGOTPDEMO

上一篇 下一篇

猜你喜欢

热点阅读