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