iOS开发中keychain的使用.docx
上传人:sy****28 上传时间:2024-09-14 格式:DOCX 页数:5 大小:220KB 金币:18 举报 版权申诉
预览加载中,请您耐心等待几秒...

iOS开发中keychain的使用.docx

iOS开发中keychain的使用.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

18 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://www.qingyangblog.com"家用制氧机十大品牌HYPERLINK"http://www.qingyangblog.com"鱼跃家庭吸氧机通常情况下,我们用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效,数据还在。使用苹果官方发布的KeychainItemWrapper或者SFHFKeychainUtils很方便,后来看到HYPERLINK"http://blog.csdn.net/bl1988530/article/details/6887946"\t"_blank"iphone使用keychain来存取用户名和密码一文,觉得对了解keychain有很大的帮助,于是ARC控也尝试了一把。需要导入Security.framework@implementationWQKeyChain+(NSMutableDictionary*)getKeychainQuery:(NSString*)service{return[NSMutableDictionarydictionaryWithObjectsAndKeys:(__bridge_transferid)kSecClassGenericPassword,(__bridge_transferid)kSecClass,service,(__bridge_transferid)kSecAttrService,service,(__bridge_transferid)kSecAttrAccount,(__bridge_transferid)kSecAttrAccessibleAfterFirstUnlock,(__bridge_transferid)kSecAttrAccessible,nil];}+(void)save:(NSString*)servicedata:(id)data{//GetsearchdictionaryNSMutableDictionary*keychainQuery=[selfgetKeychainQuery:service];//DeleteolditembeforeaddnewitemSecItemDelete((__bridge_retainedCFDictionaryRef)keychainQuery);//Addnewobjecttosearchdictionary(Attention:thedataformat)[keychainQuerysetObject:[NSKeyedArchiverarchivedDataWithRootObject:data]forKey:(__bridge_transferid)kSecValueData];//AdditemtokeychainwiththesearchdictionarySecItemAdd((__bridge_retainedCFDictionaryRef)keychainQuery,NULL);}+(id)load:(NSString*)service{idret=nil;NSMutableDictionary*keychainQuery=[selfgetKeychainQuery:service];//Configurethesearchsetting[keychainQuerysetObject:(id)kCFBooleanTrueforKey:(__bridge_transferid)kSecReturnData];[keychainQuerysetObject:(__bridge_transferid)kSecMatchLimitOneforKey:(__bridge_transferid)kSecMatchLimit];CFDataRefkeyData=NULL;if(SecItemCopyMatching((__bridge_retainedCFDictionaryRef)keychainQuery,(CFTypeRef*)&keyData)==noErr){@try{ret=[NSKeyedUnarchiverunarchiveObjectWithData:(__bridge_transferNSData*)keyData];}@catch(NSException*e){NSLog(@"Unarchiveof%@failed:%@",service,e);}@finally{}}retu