7、服务器验证时间戳密码 用户注册的时候是用密码.hmac,存储到数据库中。 登录的时候根据上面的完整算法,把加密后的密码发送到服务器。服务器端从数据库中根据用户名拿到密码,跟客户端用同样的算法再加密一遍。注意:终端用的时间要从服务器端获取,确保用的和服务器端是用的同一个时间。时间精确到分,服务器端验证时要减1,这样密码的有效期不到两分钟。
潜在风险:用户第一次注册密码时被拦截,虽然被拦截的几率小。 辅助手段:ip绑定!电话绑定。。。
#import<Foundation/Foundation.h>
@interfaceNSString (Hash)
- (NSString*)md5String;
- (NSString*)hmacMD5StringWithKey:(NSString*)key;
@end
#import"NSString+Hash.h"
#import <CommonCrypto/CommonCrypto.h>
@implementationNSString (Hash)
- (NSString*)md5String {
const char *str =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString*)hmacMD5StringWithKey:(NSString*)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CCHmac(kCCHmacAlgMD5, keyData, strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
@end