SSKeychain的使用 钥匙串
一.首先要理解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的使用 钥匙串的更多相关文章
- iOS加密方式及解压缩文件
Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base64 ...
- iOS中的加密方式 与 文件解压缩
1.Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base6 ...
- iOS开发中常用到的加密方式
1 base64 1.1 简介 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24位数据,再把这24位数据 ...
- iOS钥匙串
钥匙串 苹果的"生态圈",钥匙串访问,使用 AES 256 加密算法,能够保证用户密码的安全 钥匙串访问SDK,是苹果在 iOS 7.0.3 版本以后公布的 钥匙串访问的接口是纯 ...
- iOS 钥匙串 指纹识别 get和Post请求的区别
01-钥匙串 1. 通过系统提供的钥匙串功能可以在本地保存密码,系统使用AES的方式对密码加密 a. 查看Safari中保存的密码 2. 使用第三方框架SSKeychain把密码保存到钥匙串和获取钥匙 ...
- 获取设备唯一标识 uuid(采用第三方库SSKeychain)
SSKeyChain 下载链接: http://pan.baidu.com/s/1booV3VD 密码: ivdi /** * 获取设备唯一标识 uuid */ +(NSString*) uuid ...
- 介绍一个轻量级iOS安全框架:SSKeyChain
SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes ...
- 一个轻量级iOS安全框架:SSKeyChain
摘要 SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsof ...
- iOS Keychain,SSKeychain,使用 理解 原理
https://www.cnblogs.com/m4abcd/p/5242254.html Keychain 使用? ---为了实用最大化我觉得我应该直接先说使用! 当然是使用第三方库啦:sskeyc ...
随机推荐
- eclipse中server location为灰色,不能修改
Eclipse中tomcat service设置发布时间︰选择window ----show view---services可以看到服务的面板双击tomcat进入配置界面Service Locatio ...
- DAY12-前端之CSS
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...
- hadoop再次集群搭建(1)-安装系统
从8月份到现在12月份,中间有四个月的时间没有学习hadoop系统了.其实适应新的环境,到现在一切尘埃落定,就应该静下心来,好好学习一下hadoop以及我之前很想学习的mahout.个人对算法比较感兴 ...
- os模块 os.stat('path/filename') os.path.dirname(path) os.path.exists(path) os.path.join(path1[, path2[, ...]])
提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于 ...
- ActionBarActivity的使用注意事项
1.调用getActionbar()方法返回为空的解决方法 此activity是设计来支持低版本系统用actionbar的,低版本没有getActionbar() 需要使用 getSupportAct ...
- 关于web.xml中的<welcome-file-list>中的默认首页文件
先看我的配置文件: <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome ...
- 面试题:3年工作经验 已看1 有用 memcache和redis有什么区别
此内容偏中高级,适合有三年经验者. 1. java中wait和sleep有什么区别?多线程条件下如何保证数据安全? 答:最大区别是等待时wait会释放锁(乐观锁),而sleep会一直持有锁 ...
- java中字符串的存储
在java中,不同的字符串赋值方法,其所在的地址可能不同也就导致,两个字符串的值看似相等可是在s1==s2操作时,其结果返回的却是false 例: String s1 = "Programm ...
- 最新解决VS2017+ Mysql + EF 创建实体数据模型 闪退的办法
研究下来,就是最新的版本兼容性不好啊. 1.找到MySql管网,下载历史版本: mysql-connector-net-6.9.12 mysql-for-visualstudio-1.2.8 2.Nu ...
- Entity Framework Tutorial Basics(9):Entity Relationships
这篇前面已经转载出来了,地址:http://www.cnblogs.com/purplefox2008/p/5646466.html