iOS 鑰匙串存儲用戶數據
阿新 • • 發佈:2018-01-01
let ssi gen pass nsstring account found acc user
參考: http://www.jianshu.com/p/f6d40065bb6c
#import <Foundation/Foundation.h> #import <Security/Security.h> @interface JCKeychainTool : NSObject /** * 儲存字符串到??鑰匙串 * * @param sValue 對應的Value * @param sKey 對應的Key */ + (void)saveKeychainValue:(NSString *)sValue key:(NSString *)sKey; /** * 從??鑰匙串獲取字符串 * * @param sKey 對應的Key * * @return 返回儲存的Value */ + (NSString *)readKeychainValue:(NSString *)sKey; /** * 從??鑰匙串刪除字符串 * * @param sKey 對應的Key */ + (void)deleteKeychainValue:(NSString *)sKey; @end
#import "JCKeychainTool.h" @implementation JCKeychainTool + (NSMutableDictionary *)getKeychainQuery:(NSString *)service{ return [NSMutableDictionary dictionaryWithObjectsAndKeys: (__bridge_transfer id)kSecClassGenericPassword, (__bridge_transfer id)kSecClass,service, (__bridge_transfer id)kSecAttrService,service, (__bridge_transfer id)kSecAttrAccount, (__bridge_transfer id)kSecAttrAccessibleAfterFirstUnlock, (__bridge_transfer id)kSecAttrAccessible, nil]; } + (void)saveKeychainValue:(NSString *)sValue key:(NSString *)sKey{ NSMutableDictionary * keychainQuery = [self getKeychainQuery:sKey]; SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery); [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:sValue] forKey:(__bridge_transfer id)kSecValueData]; SecItemAdd((__bridge_retained CFDictionaryRef)keychainQuery, NULL); } + (NSString *)readKeychainValue:(NSString *)sKey { NSString *ret = nil; NSMutableDictionary *keychainQuery = [self getKeychainQuery:sKey]; [keychainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge_transfer id)kSecReturnData]; [keychainQuery setObject:(__bridge_transfer id)kSecMatchLimitOne forKey:(__bridge_transfer id)kSecMatchLimit]; CFDataRef keyData = NULL; if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) { @try { ret = (NSString *)[NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData]; } @catch (NSException *e) { NSLog(@"Unarchive of %@ failed: %@", sKey, e); } @finally { } } if (keyData) CFRelease(keyData); return ret; } + (void)deleteKeychainValue:(NSString *)sKey { NSMutableDictionary *keychainQuery = [self getKeychainQuery:sKey]; SecItemDelete((__bridge CFDictionaryRef)keychainQuery); } @end
// 存 [JCKeychainTool saveKeychainValue:@"xxx" key:@"userName"]; [JCKeychainTool saveKeychainValue:@"yyy"key:@"password"]; // 讀 [JCKeychainTool readKeychainValue:@"userName"]; [JCKeychainTool readKeychainValue:@"password"]; // 刪 [JCKeychainTool deleteKeychainValue:@"userName"]; [JCKeychainTool deleteKeychainValue:@"password"];
iOS 鑰匙串存儲用戶數據