[iOS]keychain基本API使用demo

//
//  ViewController.m
//  KeyChine test
//
//  Created by mac on 2019/12/5.
//  Copyright © 2019 mac All rights reserved.
//

#import "ViewController.h"
#import <Security/Security.h>
static NSString *server = @"www.example.com";
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@property (nonatomic)BOOL existingPassword;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    /* See:
     https://developer.apple.com/documentation/security/keychain_services/keychain_items/searching_for_keychain_items?language=objc
     */
    
    // query from keychine
    _existingPassword = NO;
    NSDictionary *query = @{(NSString *)kSecClass:(NSString *)kSecClassInternetPassword,
                            (NSString *)kSecMatchLimit:(NSString *)kSecMatchLimitOne,
                            (NSString *)kSecAttrServer:server,
                            (NSString *)kSecReturnAttributes:(id) kCFBooleanTrue ,
                            (NSString *)kSecReturnData:(id) kCFBooleanTrue
                            };
    
    CFTypeRef attrResult;
    NSMutableDictionary *attrQuery = [query mutableCopy];
    
    OSStatus stauts = SecItemCopyMatching((CFDictionaryRef)attrQuery, &attrResult);
    if (stauts != noErr) {
        NSLog(@"error===>");
    } else {
        NSLog(@"get successful!!!");
        _existingPassword = YES;
        
        NSDictionary *resultDic = (__bridge NSDictionary *)attrResult;
        NSData *pwdata = resultDic[(NSString *)kSecValueData];
        self.tf.text = [[NSString alloc] initWithData:pwdata encoding:NSUTF8StringEncoding];
    }
}

- (IBAction)saveBtnClick:(id)sender {
    
    NSString *username = @"lixiaoyi";
    NSString *password = self.tf.text;
    
    if (!_existingPassword) {
        NSDictionary *query = @{(NSString *)kSecClass:(NSString *)kSecClassInternetPassword,
                                (NSString *)kSecAttrAccount:username,
                                (NSString *)kSecAttrServer:server,
                                (NSData *)kSecValueData:[password dataUsingEncoding:NSUTF8StringEncoding]
                                };
        
        OSStatus stauts = SecItemAdd((CFDictionaryRef)query, NULL);
        if (stauts != noErr) {
            NSLog(@"error===>");
        } else {
            NSLog(@"save successful!!!");
        }
    } else {
        NSDictionary *query = @{(NSString *)kSecClass:(NSString *)kSecClassInternetPassword,
                                (NSString *)kSecAttrAccount:username,
                                (NSString *)kSecAttrServer:server,
                                (NSData *)kSecValueData:[password dataUsingEncoding:NSUTF8StringEncoding]
                                };
        
        NSDictionary *udpateDic = @{(NSString *)kSecValueData:[password dataUsingEncoding:NSUTF8StringEncoding]};
        OSStatus stauts = SecItemUpdate((CFDictionaryRef)query,(CFDictionaryRef) udpateDic);
        if (stauts != noErr) {
            NSLog(@"error===>");
        } else {
            NSLog(@"save successful!!!");
        }
    }
}

@end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值