IOS存储安全 MD5 (重要)

分享一个牛人写的加密分类,注释相当清晰。

Security.zip

 

加密方案

方案一:直接 MD5  非常不安全 (穷举破解)

     pwd = pwd.md5String;

 

方案二 MD5 + 盐   盐值要够`咸`,可以从服务器获取

    

pwd = [pwd stringByAppendingString:@"无规律复杂的盐"].md5String;

   

安全方案三 - HMAC

    

pwd = [pwd hmacMD5StringWithKey:@"key"];

 

相对之前的方案,安全级别要高很多,使用 `key` 对 pwd 进行`加密`,然后在进行 md5,然后再次加密,再次 md5

    

安全方案四 - 时间戳密码(本地时间与服务器可能不一致,最好从服务器获取时间)

保证了不同时间传输的密码都是不一样的,服务器判断时要判断当前 分钟和前一分钟。密码有效期为两分钟。

 

// 对密码进行时间戳加密

- (NSString*)timePassword:(NSString*) pwd{

    // 1.生成key 的 md5

     NSString *key = @"weijing_yun".md5String;

    NSLog(@"key: %@", key);

 

       // 2.用key 对密码进行hmac 加密

    NSString *pwdkey = [pwd hmacMD5StringWithKey:key];

    // 3. 取当前的服务器系统时间 放在主线程执行 以变后面加时间戳

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/hmackey.php"];

    // 使用同步获取时间

    NSData *data = [NSData dataWithContentsOfURL:url];

    // 反序列化

    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];

     //取出日期字符串

    NSString *dateStr = dict[@"key"];

    NSLog(@"时间%@", dateStr);

    

    // 4.密码 + 时间戳

    pwdkey = [pwdkey stringByAppendingString:dateStr];

    NSLog(@"%@" , pwdkey);

    

    // 5.再次使用 hmac 加密

  return [pwdkey hmacMD5StringWithKey:key];

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。