首页 > 代码库 > keychain

keychain

UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。

UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码。

禁止udid是苹果为了保护用户的隐私,uuid则是给出的替代方案。

KeyChain:

 

通常情况下,我们用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效,数据还在。

 

使用苹果官方发布的KeychainItemWrapper或者SFHFKeychainUtils很方便,需要导入Security.framework。每个ios程序都有一个独立的keychain存储。

 

 

在应用里使用使用keyChain,我们需要导入Security.framework ,keychain的操作接口声明在头文件SecItem.h里。直接使用SecItem.h里方法操作keychain,需要写的代码较为复杂,为减轻程序的开发,可以使用一些已经封装好了的工具类:KeychainItemWrapper和 SFHFKeychainUtils。
一、使用工具类
(一)KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用操作的封装类,在官网上下载了GenericKeychain项目后,只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷贝到我们项目,并导入Security.framework 。KeychainItemWrapper的用法:
 
/** 初始化一个保存用户帐号的KeychainItemWrapper */
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"
                                                                                                     accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];  
 
//保存帐号
[wrapper setObject:@"<帐号>" forKey:(id)kSecAttrAccount];    
 
//保存密码
[wrapper setObject:@"<帐号密码>" forKey:(id)kSecValueData];    
 
//从keychain里取出帐号密码
NSString *password = [wrapper objectForKey:(id)kSecValueData];      
 
//清空设置
[wrapper resetKeychainItem];
其中方法“- (void)setObject:(id)inObject forKey:(id)key;”里参数“forKey”的值应该是Security.framework 里头文件“SecItem.h”里定义好的key,用其他字符串做key程序会崩溃!
 
(二)SFHFKeychainUtils 提供了在 iOS keychain中安全的存储密码的工具
 
 Demo:下载地址https://github.com/ldandersen/scifihifi-iphone/tree/master/security
 
1、引入Security.frameWork框架。
 
2、引入头文件:SFHKeychainUtils.h.
 
3、存密码:
 
[SFHFKeychainUtils storeUsername:@"dd" andPassword:@"aa"forServiceName:SERVICE_NAME updateExisting:1 error:nil];
 
[SFHFKeychainUtils deleteItemForUsername:@"dd" andServiceName:SERVICE_NAME error:nil];
 
4、取密码:
 
NSString *passWord =  [SFHFKeychainUtils getPasswordForUsername:@"dd"andServiceName:SERVICE_NAME error:nil];
 
二、使用SecItem.h里方法操作keychain
 
 
 
 

 

 

keychain