码迷,mamicode.com
首页 > 其他好文 > 详细

加密之 MD5

时间:2015-10-21 01:37:42      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:

  • 同样的密码,同样的加密算法,每次加密的结果是不一样

密码方案

  • 方案一:直接 MD5
pwd = pwd.md5String;
该方法不安全
  • 方案二 MD5 + 盐
pwd = [pwd stringByAppendingString:salt].md5String;
  • 安全方案三 - HMAC
pwd = [pwd hmacMD5StringWithKey:@"itheima"];

相对之前的方案,安全级别要高很多,使用 itheima 对 pwd 进行加密,然后在进行 md5,然后再次加密,再次 md5
  • 安全方案四 - 时间戳密码
- (NSString *)timePassword {
    // 1. 生成key
    NSString *key = @"itheima".md5String;
    NSLog(@"HMAC Key - %@", key);

    // 2. 对密码进行 hmac 加密
    NSString *pwd = [self.pwd hmacMD5StringWithKey:key];

    // 3. 获取当前系统时间
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm";
    NSString *dateStr = [fmt stringFromDate:[NSDate date]];
    NSLog(@"%@", dateStr);

    // 4. 将系统时间拼接在第一次加密密码的末尾
    pwd = [pwd stringByAppendingString:dateStr];

    // 5. 返回拼接结果的再次 hmac
    return [pwd hmacMD5StringWithKey:key];
}

密码时效大约两分钟,需要服务器脚本支持,安全级别高,不过客户端的时间与服务器的时间不同步

  • 安全方案五 - 服务器时间戳密码
/// 生成时间戳密码
- (NSString *)timePassword:(NSString *)pwd {
    // 1. 以 itheima.md5 作为 hmac key
    NSString *key = @"itheima".md5String;
    NSLog(@"HMAC KEY - %@", key);

    // 2. 对密码进行 hamc
    NSString *pwd = [self.pwd hmacMD5StringWithKey:key];

    // 3. 取服务器时间
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost/hmackey.php"]];
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
    NSString *dateStr = dict[@"key"];

    // 4. 拼接时间字符串
    pwd = [pwd stringByAppendingString:dateStr];

    // 5. 再次 hmac 散列密码
    return [pwd hmacMD5StringWithKey:key];
}

加密之 MD5

标签:

原文地址:http://www.cnblogs.com/jiangshengkai/p/4896558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!