Fork me on GitHub

利用钥匙串,在应用里保存用户密码的方法(ASIHTTPRequest清除keyChain方法)

想在应用里保存帐号、密码等信息的话,直接存到 plist 里显然是不负责任的,自己折腾加密既麻烦又不能保证不被反编译破解。实际上苹果 iOS 和 Mac OS X 系统自带了一套敏感信息保存方案:"钥匙串" (Keychain)。

    用原生的 Security.framework 就可以实现钥匙串的访问、读写。但是只能在真机上进行,模拟器会出错。在 Github 上有个封装的非常好的类来实现这个功能,让你既能在模拟器又能在真机上访问钥匙串。类的地址: http://github.com/ldandersen/scifihifi-iphone/tree/master/security

    具体代码:

//获取密码
+ (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;

原文地址:  http://b.imi.im/?p=362



ASIHTTPRequest清除keyChain方法:    http://blog.csdn.net/favormm/article/details/7022383

在用ASIHTTPRequest的时候,如果设置了 

  1. [request setUseKeychainPersistence:YES];  

那么你的证认信息将保存在keyChain里,即是是错误的认识也会保存,错误的其实不应该保存,于是我们得想办法将错误的从keyChain中清除掉,读了一下源码,找到了方法,直接上代码,只需要将下面代码

  1. [ASIHTTPRequest removeCredentialsForProxy:[request proxyHost] port:[request proxyPort] realm:[request proxyAuthenticationRealm]];  
  2. NSDictionary *credentials = [request findSessionProxyAuthenticationCredentials];  
  3. [ASIHTTPRequest removeProxyAuthenticationCredentialsFromSessionStore:[credentials objectForKey:@"Credentials"]];  

加入到

  1. [request setFailedBlock:^{ }];  

中即可

 这样,当错误的时候,就会将认识信息删除。

posted on 2012-02-07 11:43  pengyingh  阅读(1014)  评论(0)    收藏  举报

导航