KeyChain的封装

来源:互联网 发布:淘宝上有正品阿迪吗 编辑:程序博客网 时间:2024/05/19 18:11

发现还是SFHFKeychainUtils这个更好用,以后尽量使用这个。



KeychainTool.h

#import <Foundation/Foundation.h>@interface KeychainTool : NSObject+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service ;+ (void)save:(NSString *)service data:(id)data ;+ (id)load:(NSString *)service ;+ (void)delete:(NSString *)service ;@end

KeychainTool.m

```# import "KeychainTool.h" @implementation KeychainTool+ (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)save:(NSString *)service data:(id)data {     //Get search dictionary     NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];     //Delete old item before add new item     SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery);     //Add new object to search dictionary(Attention:the data format)     [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge_transfer id)kSecValueData];     //Add item to keychain with the search dictionary     SecItemAdd((__bridge_retained CFDictionaryRef)keychainQuery, NULL); }+ (id)load:(NSString *)service {     id ret = nil;     NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];     //Configure the search setting     [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_retained CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {         @try {             ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge_transfer NSData *)keyData];         } @catch (NSException *e) {             NSLog(@"Unarchive of %@ failed: %@", service, e);         } @finally {         }     }     return ret; }+ (void)delete:(NSString *)service {     NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];     SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery); } @end

dictionaryWithObjectsAndKeys这个方法时创建字典,字典里有多个键和值,并返回。(值,键,值。。。。nil)


0 0
原创粉丝点击