简单使用 SSKeychain 存储密码

来源:互联网 发布:kj90数据采集传输协议 编辑:程序博客网 时间:2024/06/17 03:09

一.首先要理解keychain与userdefaults的区别:

1.keychain是将数据加密后存储在本地,更安全.路径:Library/Application Support/iPhone Simulator/模拟器版本/Library/Keychains/

userdefaults数据以明文的形式保存在.plist文件中.路径:Library/Application Support/iPhone Simulator/模拟器版本/Applications/应用对应的数字/Library/Preference/.plist文件

2.当你删除APP后keychain存储的数据不会删除,user defaults存储的数据会随着APP而删掉

二.SSkeychain是对keychain的封装 实现了添加/删除/查询用户名和密码.

三.流程

1.使用pod:(或者不使用pod,直接将下载好的SSKeychain文件夹拖进工程里)

pod 'SSKeychain'

2.代码

//

//  ViewController.m

//  SSKeychainTest

//

//  Created by ZXGavin on 15/12/22.

//  Copyright © 2015 ZXGavin. All rights reserved.

//


#import "ViewController.h"

#import <SSKeychain.h>

#import <SSKeychainQuery.h>


//应用名称(保证唯一性)

#define ServiceName @"com.zx.tec.SSKeychainTest"


//账号

#define Account @"test2"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    

    [superviewDidLoad];

    /**

     *  SSKeychain 是一种本地存储方式不会因为程序卸载而清除用于存储私密唯一的标示

     *

     *  五个方法:(用到两个)

     *  + (NSArray *)allAccounts;

     

     *  + (NSArray *)accountsForService:(NSString *)serviceName;

     

     *  + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;

     

     *  + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;

     

     *  + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;

     

     */

    

#pragma mark - 开始使用 SSKeychain

    

    //获取uuid(如果想获取唯一标示,存储以 uuid为密码存储 下次登陆直接读取检测是否安装)

//    CFUUIDRef uuid = CFUUIDCreate(NULL);

//    assert(uuid != NULL);

//    CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);

//    NSLog(@"%@~~%@", uuidStr, [NSString stringWithFormat:@"%@", uuidStr]);

    

    /**

     *  + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;//获取指定 serviceName account的密码

     *

     *  + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;//存储指定 serviceName account 的密码

     *

     */

    NSString *passWord = @"123456";

    if (![SSKeychainpasswordForService:ServiceNameaccount:Account]) {//查看本地是否存储指定 serviceName account的密码

        

        //如果没设置密码则设定密码并存储

        [SSKeychainsetPassword:passWordforService:ServiceNameaccount:Account];

        

        //打印密码信息

        NSString *retrieveuuid = [SSKeychainpasswordForService:ServiceNameaccount:Account];

        NSLog(@"SSKeychain存储显示:未安装过:%@", retrieveuuid);

        

    }else{

        

        //曾经安装过则直接能打印出密码信息(即使删除了程序再次安装也会打印密码信息)区别于 NSUSerDefault

        NSString *retrieveuuid = [SSKeychainpasswordForService:ServiceNameaccount:Account];

        NSLog(@"SSKeychain存储显示 :已安装过:%@", retrieveuuid);

    

    }

    

#warning 区别于 NSUSerDefault (删除应用程序后存储的数据就会消失)

    

    if (![[NSUserDefaultsstandardUserDefaults]boolForKey:@"TestOne"]) {

        [[NSUserDefaultsstandardUserDefaults]setBool:YESforKey:@"TestOne"];

        

        NSLog(@"NSUSerDefault存储显示:未安装");

    

    }else{

        

        NSLog(@"NSUSerDefault存储显示:安装过");

        

    }

    

}