iOS 使用KeyChain保存数据
来源:互联网 发布:照片相册制作软件 编辑:程序博客网 时间:2024/05/17 22:07
一般情况下,可以用NSUserDefaults存储数据信息,但是对于一些私密信息,比如账号、密码等等,就需要使用更为安全的keychain了。而Keychain的信息是存在于每个应用(app)的沙盒之外的,所以keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后数据还在。
新建一个类,取名JJKeyChain,如下:
#import <Foundation/Foundation.h>#import <Security/Security.h>#define KEY_PASSWORD @"com.rry.app.password"#define KEY_USERNAME_PASSWORD @"com.rry.app.usernamepassword"@interface JJKeyChain : NSObject+ (void)save:(NSString *)service data:(id)data;+ (id)load:(NSString *)service;+ (void)delete:(NSString *)service;@end
.m文件里代码:
+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service { return [NSMutableDictionary dictionaryWithObjectsAndKeys: (id)kSecClassGenericPassword,(id)kSecClass, service, (id)kSecAttrService, service, (id)kSecAttrAccount, (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible, nil];}+ (void)save:(NSString *)service data:(id)data { //Get search dictionary NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; //Delete old item before add new item SecItemDelete((CFDictionaryRef)keychainQuery); //Add new object to search dictionary(Attention:the data format) [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData]; //Add item to keychain with the search dictionary SecItemAdd((CFDictionaryRef)keychainQuery, NULL);}+ (id)load:(NSString *)service { id ret = nil; NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; //Configure the search setting //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; CFDataRef keyData = NULL; if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) { @try { ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData]; } @catch (NSException *e) { NSLog(@"Unarchive of %@ failed: %@", service, e); } @finally { } } if (keyData) CFRelease(keyData); return ret;}+ (void)delete:(NSString *)service { NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; SecItemDelete((CFDictionaryRef)keychainQuery);}
使用示例:
//存 NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionary]; [usernamepasswordKVPairs setObject:@"123" forKey:KEY_PASSWORD]; [JJKeyChain save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs]; //取 NSMutableDictionary *usernamepasswordKVPairs1 = (NSMutableDictionary *)[JJKeyChain load:KEY_USERNAME_PASSWORD]; NSLog(@"%@",[usernamepasswordKVPairs1 objectForKey:KEY_PASSWORD]); //删 [JJKeyChain delete:KEY_USERNAME_PASSWORD];
0 0
- iOS 使用KeyChain保存数据
- [iOS]数据永久保存(KeyChain)
- iOS开发--利用keychain保存用户数据
- iOS 使用KeyChain存储数据
- iOS密码保存(keychain简单使用)
- IOS使用sskeychain调用keychain保存密码
- IOS使用sskeychain调用keychain保存密码
- iOS密码保存(keychain简单使用)
- iOS开发,使用keychain保存用户名密码
- iOS----KeyChain保存uuid
- iOS开发 -- KeyChain使用与共享数据
- iOS 使用Keychain中的kSecClassGenericPassword存储数据
- Keychain介绍、使用Snoop-it分析Keychain读写、使用Keychain Dumper导出Keychain中的数据 - iOS开发
- IOS——使用keychain对数据进行持久化保存(删除APP不影响数据)
- iOS开发小点之--使用Keychain保存用户名密码
- IOS中使用sskeychain调用keychain(钥匙串)保存密码
- iOS keychain存储数据
- iOS keychain的使用
- ambari与cloudera-manamger5.8.2
- 用Android Studio打Jar包
- IT技术视频分享
- 浅谈WebLogic和Tomcat
- 安卓7.0 声音适配(游戏声音),安卓7.0声音播放失灵,适配.
- iOS 使用KeyChain保存数据
- Android 进程间通信AIDL讲解 二
- Swift10-字符串的基本简介及用法
- opencv 无法查找或打开coreXXX.pdb引起的filestorage无法读的问题
- HBase原理
- kettle转换工具
- C# 基于Emgu类库 调用笔记本摄像头进行脸部识别
- R语言在ubuntu下的编译安装
- sysbench测试oracle自定义lua以使用绑定变量