美文网首页
iOS KeyChain

iOS KeyChain

作者: _秃头少女_ | 来源:发表于2019-07-23 14:03 被阅读0次
    //
    //  UserKeyChain.m
    //  test
    //
    //  Created by kelly on 2019/7/23.
    //  Copyright © 2019 kaili. All rights reserved.
    //
    
    #import "UserKeyChain.h"
    
    @implementation UserKeyChain
    + (NSMutableDictionary *)keyChainQueryDictionaryWithService:(NSString *)service{
        NSMutableDictionary *keyChainQueryDictaionary = [[NSMutableDictionary alloc]init];
        [keyChainQueryDictaionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
        [keyChainQueryDictaionary setObject:service forKey:(id)kSecAttrService];
        [keyChainQueryDictaionary setObject:service forKey:(id)kSecAttrAccount];
        return keyChainQueryDictaionary;
    }
    + (BOOL)addData:(id)data forService:(NSString *)service{
        NSMutableDictionary *keychainQuery = [self keyChainQueryDictionaryWithService:service];
        SecItemDelete((CFDictionaryRef)keychainQuery);
        [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData];
        OSStatus status= SecItemAdd((CFDictionaryRef)keychainQuery, NULL);
        if (status == noErr) {
            return YES;
        }
        return NO;
    }
    + (id)queryDataWithService:(NSString *)service {
        id result;
        NSMutableDictionary *keyChainQuery = [self keyChainQueryDictionaryWithService:service];
        [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 {
                result = [NSKeyedUnarchiver  unarchiveObjectWithData:(__bridge NSData *)keyData];
            }
            @catch (NSException *exception) {
                NSLog(@"不存在数据");
            }
            @finally {
                
            }
        }
        if (keyData) {
            CFRelease(keyData);
        }
        return result;
    }
    + (BOOL)updateData:(id)data forService:(NSString *)service{
        NSMutableDictionary *searchDictionary = [self keyChainQueryDictionaryWithService:service];
        
        if (!searchDictionary) {
            return NO;
        }
        
        NSMutableDictionary *updateDictionary = [[NSMutableDictionary alloc] init];
        [updateDictionary setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData];
        OSStatus status = SecItemUpdate((CFDictionaryRef)searchDictionary,
                                        (CFDictionaryRef)updateDictionary);
        if (status == errSecSuccess) {
            return YES;
        }
        return NO;
    }
    + (BOOL)deleteDataWithService:(NSString *)service{
        NSMutableDictionary *keyChainDictionary = [self keyChainQueryDictionaryWithService:service];
        OSStatus status = SecItemDelete((CFDictionaryRef)keyChainDictionary);
        if (status == noErr) {
            return YES;
        }
        return NO;
    }
    
    @end
    
    

    https://www.jianshu.com/p/bf6b42470bba
    https://www.cnblogs.com/junhuawang/p/8194484.html

    相关文章

      网友评论

          本文标题:iOS KeyChain

          本文链接:https://www.haomeiwen.com/subject/nvbolctx.html