#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