一.首先要理解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

#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 {

[super viewDidLoad];

/**

*  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 (![SSKeychain passwordForService:ServiceName account:Account]) {//查看本地是否存储指定 serviceName 和 account 的密码

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

[SSKeychain setPassword:passWord forService:ServiceName account:Account];

//打印密码信息

NSString *retrieveuuid = [SSKeychain passwordForService:ServiceNameaccount:Account];

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

}else{

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

NSString *retrieveuuid = [SSKeychain passwordForService:ServiceNameaccount:Account];

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

}

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

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

[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"TestOne"];

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

}else{

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

}

}

SSKeychain的使用 钥匙串的更多相关文章

  1. iOS加密方式及解压缩文件

    Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base64 ...

  2. iOS中的加密方式 与 文件解压缩

    1.Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base6 ...

  3. iOS开发中常用到的加密方式

    1 base64 1.1 简介 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24位数据,再把这24位数据 ...

  4. iOS钥匙串

    钥匙串 苹果的"生态圈",钥匙串访问,使用 AES 256 加密算法,能够保证用户密码的安全 钥匙串访问SDK,是苹果在 iOS 7.0.3 版本以后公布的 钥匙串访问的接口是纯 ...

  5. iOS 钥匙串 指纹识别 get和Post请求的区别

    01-钥匙串 1. 通过系统提供的钥匙串功能可以在本地保存密码,系统使用AES的方式对密码加密 a. 查看Safari中保存的密码 2. 使用第三方框架SSKeychain把密码保存到钥匙串和获取钥匙 ...

  6. 获取设备唯一标识 uuid(采用第三方库SSKeychain)

    SSKeyChain 下载链接: http://pan.baidu.com/s/1booV3VD 密码: ivdi /** *  获取设备唯一标识 uuid */ +(NSString*) uuid ...

  7. 介绍一个轻量级iOS安全框架:SSKeyChain

    SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes ...

  8. 一个轻量级iOS安全框架:SSKeyChain

    摘要 SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsof ...

  9. iOS Keychain,SSKeychain,使用 理解 原理

    https://www.cnblogs.com/m4abcd/p/5242254.html Keychain 使用? ---为了实用最大化我觉得我应该直接先说使用! 当然是使用第三方库啦:sskeyc ...

随机推荐

  1. 第三章 Java程序优化(待续)

    字符串优化处理 String对象及其特点 String对象是java语言中重要的数据类型,但它并不是Java的基本数据类型.在C语言中,对字符串的处理最通常的做法是使用char数组,但这种方式的弊端是 ...

  2. 10-08C#基础--进制转换

    (一).数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径.节省设备等优点,为了便于描述,又常用八.十六进制作为二进制的缩写.一般计数都采用进位计数,其特点 ...

  3. Linux 压缩文件 和解压文件

    .zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName .rar 解压:rar -x FileName.zip 压缩:rar -a FileNam ...

  4. [poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)

    题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式.的最大值 解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交) 或者r-l<=1e-3(右 ...

  5. node Util 模块

    该util模块主要设计用于支持Node.js自己的内部API的需求.但是,许多实用程序对于应用程序和模块开发人员也很有用.它可以通过以下方式访问: const util = require('util ...

  6. ROS Learning-002 beginner_Tutorials 如何添加ROS环境变量 和 如何更新ROS源代码

    ROS Indigo beginner_Tutorials 之 添加环境变量 和 更新ROS源代码的命令 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...

  7. p4301 [CQOI2013]新Nim游戏

    传送门 分析 通过nim游戏我们可以知道我们现在的任务就是通过两轮之后使得剩余的几堆异或和为非0数 所以我们只需要在第一步使得剩余集合的任意非空子集的异或和非0即可 于是我们考虑线性基 我们知道线性基 ...

  8. delete请求,删除不成功?

    因为,在数据库底层,其实并没有删除该数据,只是将数据的标识设置为is_deleted.因此,最后即使删除了,查询的时候还是会显示在界面. 故,需要重写get请求.

  9. 数据结构_Search

    问题描述 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索自己的手机.现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点都有一个权值 x,代表他心 ...

  10. 数据结构 queue

    问题描述 t 个团队在餐厅前准备排队. 他们的排队规则是:初始队伍为空.一个人要排进队伍前, 先搜索队伍中是否有他的队友. 如果有, 这名成员就直接站在最后一个队友的后面,如果没有,那么这名成员只能排 ...