iOS钥匙串

//简介
iOS7.0.3版本加入iCloud钥匙串功能
钥匙串功能可以协助记忆繁琐的个人账户信息,而且也可以在注册账户时生成一个很难破解的密码(Safari使用),之后Safari便可以自动输入这些信息
iCloud钥匙串使用了256位AES 加密技术,用户的信息会非常安全
启用iCloud钥匙串
设置——iCloud——钥匙串中开启这一功能
输入iCloud登录密
设置四位数的iCloud安全码
输入一个电话号码用于使用iCloud安全码时验证身份

//在iOS中使用钥匙串访问——sskeychain
钥匙串访问本身使用C语言的框架,为了方便起见,建议使用第三方框架 sskeychain
官网地址:https://github.com/soffes/sskeychain
常用方法:
+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;
提示:
钥匙串只能保证密码在本地的存储安全,并不能保证在网络传输中的安全


/**
 Cookie中保存的是md5后的密码
 钥匙串中保存的是用户的原始密码,能够保证用户的密码明文是安全的
 
 SSKeychain的使用
 
 1. 定义服务名称的宏,便于全局使用
 2. 用户登录成功后,将密码明文保存到钥匙串
 [SSKeychain setPassword:pwd forService:SSKeyChainService account:self.username.text];
 3. 用户再次使用时,从钥匙串中读取用户密码,设置UI,可以保证密码明文被正确设置,可以保证用户体验
 [SSKeychain passwordForService:SSKeyChainService account:self.username.text];
 */
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 从钥匙串中读取所有账户信息
    NSArray *accounts = [SSKeychain allAccounts];
    NSLog(@"%@", accounts);
    
    // 取出张三的密码
    NSString *pwd = [SSKeychain passwordForService:SSKeyChainService account:@"zhangsan"];
    NSLog(@"%@", pwd);
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSString *username = @"zhangsan";
    NSString *pwd = @"zhang";
    
    // 1. url
    NSURL *url = [NSURL URLWithString:@"http://192.168.19.45/login2.php"];
    // 2. request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    
    NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", username, pwd];
    request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    
    // 3. connection
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
        
        NSLog(@"%@", dict);
        
        // 用户登录正确,在保存用户密码
        if ([dict[@"userId"] intValue] > 0) {
            NSLog(@"用户登录正确");
            // 提示:service可以随便,能够认识就可以
            [SSKeychain setPassword:pwd forService:SSKeyChainService account:username];
        }
    }];
}

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