如何使用iOS Keychain存储用户敏感信息

来源:互联网 发布:sqlserver 2008r2.net 编辑:程序博客网 时间:2024/05/23 01:11

转自 http://blog.csdn.net/jinglijun/article/details/8253748

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。从ios 3。0开始,跨程序分享keychain变得可行。

如何需要在应用里使用使用keyChain,我们需要导入Security.framework ,keychain的操作接口声明在头文件SecItem.h里。直接使用SecItem.h里方法操作keychain,需要写的代码较为复杂,为减轻咱们程序员的开发,我们可以使用一些已经封装好了的工具类,下面我会简单介绍下我用过的两个工具类:KeychainItemWrapper和SFHFKeychainUtils。

KeychainItemWrapper (下载)

KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用操作的封装类,在官网上下载了GenericKeychain项目后,只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷贝到我们项目,并导入Security.framework 。KeychainItemWrapper的用法:

[html] view plaincopy
  1. /** 初始化一个保存用户帐号的KeychainItemWrapper */  KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"                                                                       accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];     
  2.   //保存帐号     
  3. [wrapper setObject:@"<帐号>" forKey:(id)kSecAttrAccount];            //保存密码     
  4. [wrapper setObject:@"<帐号密码>" forKey:(id)kSecValueData];           //从keychain里取出帐号密码    
  5.  NSString *password = [wrapper objectForKey:(id)kSecValueData];      
  6.      //清空设置   
  7.   [wrapper resetKeychainItem];     

其中方法“- (void)setObject:(id)inObject forKey:(id)key;”里参数“forKey”的值应该是Security.framework 里头文件“SecItem.h”里定义好的key,用其他字符串做key程序会崩溃!

SFHFKeychainUtils(下载)

SFHFKeychainUtils是另一个封装了KeyChain简单操作的第三方类库,使用上比KeychainItemWrapper要简单点,SFHFKeychainUtils只提供了获取、保存和删除三个方法:

[html] view plaincopy
  1. #import <UIKit/UIKit.h>     
  2.     
  3. @interface SFHFKeychainUtils : NSObject {     
  4.          
  5. }     
  6.     
  7. /** 从Keychain里获取用户密码   
  8.  *param username 用户名    
  9.  *param serviceName 服务名    
  10.  *return NSString 用户名对应的密码    
  11.  */    
  12. + (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;     
  13.     
  14. /**   
  15.  *把用户的密码保存到Keychain里    
  16.  *@param username 用户名    
  17.  *@param password 要保存的密码    
  18.  *@param serviceName 本条keychains所属的服务(组)    
  19.  *return BOOL 是否存储成功    
  20.  */    
  21. + (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;     
  22.     
  23. /**   
  24.  * 删除某个用户信息    
  25.  *param username 用户名    
  26.  *param serviceName 用户所属的服务(组)    
  27.  *return BOOL 是否删除成功    
  28.  */    
  29. + (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;     
  30.     
  31. @end   

使用方法:

[html] view plaincopy
  1. #define ServiceName @"com.mycompany.yourAppServiceName"       
  2.   NSError *error;   
  3.   NSString *userName = @"<用户名>";     
  4.   NSString *password = @"<用户密码>";     
  5.          
  6. /** 保存用户的密码*/    
  7. BOOL saved = [SFHFKeychainUtils storeUsername:userName     
  8.                                   andPassword:password      
  9.                                forServiceName:ServiceName      
  10.                                updateExisting:YES      
  11.                                      error:&error ];     
  12. if (!saved) {     
  13.     NSLog(@"保存密码时出错:%@", error);     
  14. }     
  15.          
  16. error = nil;     
  17. NSString *thePassword = [SFHFKeychainUtils getPasswordForUsername:userName      
  18.                                                    andServiceName:ServiceName      
  19.                                                             error:&error];     
  20. if(error){     
  21.     NSLog(@"从Keychain里获取密码出错:%@", error);     
  22. }    

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 梁山伯与祝英台简介 梁山伯祝英台真实历史 梁山伯与祝英台民间故事 梁山伯与祝英台主要内容 梁山伯与祝英台完整故事 梁山伯与祝英台真实故事 民间故事梁山伯与祝英台 梁山伯与祝英台内容 梁山伯与祝英台全文 梁山伯与祝英台楼台会 梁山伯与祝英台故事缩写 梁山伯与祝英台故事全文 梁山伯与祝英台读后感 缩写梁山伯与祝英台 梁山伯与祝英台缩写300字 梁山伯祝英台的故事 祝英台与梁山伯故事 梁山伯与祝英台缩写400字 梁山伯与祝英台作者 梁山伯和祝英台故事 梁山伯与祝英台作文 梁山伯与祝英台缩写200 梁山伯祝英台真实故事 梁山伯与祝英台缩写400字左右 梁山伯与祝英台缩写作文 梁山伯与祝英台什么剧 梁山伯与祝英台100字心得体会 梁山伯与祝英台结局 梁山伯与祝英台有东方什么称 梁山伯与祝英台故事原文 梁山伯与祝英台图片 梁山伯与祝英台原文 七世夫妻之梁山伯与祝英台 梁山伯与祝英台剧种 越剧梁山伯与祝英台全剧老版 梁山伯与祝英台感想 祝英台与梁山伯的故事 梁山风景区门票多少钱 山东水泊梁山风景区 水泊梁山风景区好玩吗 山东梁山县