想在应用里保存帐号、密码等信息的话,直接存到 plist 里显然是不负责任的,自己折腾加密既麻烦又不能保证不被反编译破解。实际上苹果 iOS 和 Mac OS X 系统自带了一套敏感信息保存方案:"钥匙串" (Keychain)。
用原生的 Security.framework 就可以实现钥匙串的访问、读写。但是只能在真机上进行,模拟器会出错。在 Github 上有个封装的非常好的类来实现这个功能,让你既能在模拟器又能在真机上访问钥匙串。类的地址:
具体代码:
//获取密码
+ (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;//保存密码
+ (void) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;//删除密码
+ (void) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;原文地址:
ASIHTTPRequest清除keyChain方法:
在用ASIHTTPRequest的时候,如果设置了
- [request setUseKeychainPersistence:YES];
那么你的证认信息将保存在keyChain里,即是是错误的认识也会保存,错误的其实不应该保存,于是我们得想办法将错误的从keyChain中清除掉,读了一下源码,找到了方法,直接上代码,只需要将下面代码
- [ASIHTTPRequest removeCredentialsForProxy:[request proxyHost] port:[request proxyPort] realm:[request proxyAuthenticationRealm]];
- NSDictionary *credentials = [request findSessionProxyAuthenticationCredentials];
- [ASIHTTPRequest removeProxyAuthenticationCredentialsFromSessionStore:[credentials objectForKey:@"Credentials"]];
加入到
- [request setFailedBlock:^{ }];
中即可
这样,当错误的时候,就会将认识信息删除。