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

简单的DEMO实现

  • 简介:
    OTP全称叫One-time Password,也称动态口令,是根据专门的算法每隔60秒生成一个与时间相关的、不可预测的随机数字组合,每个口令只能使用一次,每天可以产生43200个密码。
iOS 动态口令,动态密码生成(OTP)_第1张图片
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

你可能感兴趣的:(iOS 动态口令,动态密码生成(OTP))