#import <Foundation/Foundationh> #import <Security/Securityh> @interface MyKeychain : NSObject + (BOOL)save:(NSString*)service data:(id)data; + (id)load:(NSString*)service; + (void)delete:(NSString*)service; @end b)MyKeychainm// // MyKeychainm // UUIDdemo // // Created by 555chy on 6/10/ // Copyright © 2016 555chy All rights reserved // #import "MyKeychainh" @implementation MyKeychain + (NSMutableDictionary*) getKeychainQuery: (NSString*)service { return [NSMutableDictionary dictionaryWithObjectsAndKeys: (id)kSecClassGenericPassword, (id)kSecClass, service, (id)kSecAttrService, service, (id)kSecAttrAccount, (id)kSecAttrAccessibleAfterFirstUnlock, (id)kSecAttrAccessible, nil nil]; } //service :Key data :value
+ (BOOL) save:(NSString*)service data:(id)data { NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; SecItemDelete((CFDictionaryRef)keychainQuery); [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData]; return SecItemAdd((CFDictionaryRef)keychainQuery, NULL) == noErr; } //加载by KEY+ (id) load:(NSString*)service { id ret = NULL; NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; NSData *keyData = NULL; if(SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef*)(void*)&keyData) == noErr) { @try { ret = [NSKeyedUnarchiver unarchiveObjectWithData:keyData]; } @catch (NSException *exception) { NSLog(@"Unarchive of %@ failed: %@", service, exception); } @finally { } } return ret; } //删除by Key+ (void) delete:(NSString*)service { NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; SecItemDelete((CFDictionaryRef)keychainQuery); } @end

1181

被折叠的 条评论
为什么被折叠?



