一个轻量级iOS安全框架:SSKeyChain
SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码、账户进行访问,包括读取、删除和设置。SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes。
项目地址:https://github.com/samsoffes/sskeychain
在工程中加入SSKeyChain
在工程中加入Security.framework框架。
把SSKeychain.h和SSKeychain.m加到项目文件夹。
使用SSKeyChain
通过以下类方法来使用SSKeyChain(请查看SSKeyChain.h):
+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceNameaccount:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceNameaccount:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString*)serviceName account:(NSString *)account;
文档
在Xcode中安装SSKeyChain的帮助文档需要以下步骤:
打开菜单 Xcode -> Preferences
选择 Downloads
选择 Documentation
点击底部的加号按钮,并输入以下URL: http://docs.samsoff.es/com.samsoffes.sskeychain.atom
点击”SSKeyChain Documentation”旁边的install按钮。 (如果你看不到它,也没有提示任何错误,请重启Xcode)
确保在Organizer中可选的docset中能够看到SSKeychain。
此外,可以在线查看SSKeychain Documentation。
调试
如果无法保存钥匙串,请使用SSKeychain.h中提供的错误代码,例如:
NSError *error = nil;
NSString *password = [SSKeychainpasswordForService:@"MyService" account:@"samsoffes"error:&error];
if ([error code] == SSKeychainErrorNotFound) {
NSLog(@"Passwordnot found");
}
显然,你对做这个应该很熟悉了。访问钥匙串是件痛苦的事情,你要随时检查它的每个错误和失败。SSKeychain并没有使它(钥匙串)变得更稳定,它仅仅是繁琐的C APIs封装。
示例代码
保存一个UUID字符串到钥匙串:
CFUUIDRef uuid = CFUUIDCreate(NULL);
assert(uuid != NULL);
CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
[SSKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStr]
forService:@"com.yourapp.yourcompany"account:@"user"];
然后,从钥匙串读取UUID:
NSString *retrieveuuid = [SSKeychainpasswordForService:@"com.yourapp.yourcompany"account:@"user"];
注意: setPassword和passwordForSevice方法中的services 和 accounts 参数应该是一致的。
一个轻量级iOS安全框架:SSKeyChain的更多相关文章
- 介绍一个轻量级iOS安全框架:SSKeyChain
SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes ...
- NET Core写了一个轻量级的Interception框架[开源]
NET Core写了一个轻量级的Interception框架[开源] ASP.NET Core具有一个以ServiceCollection和ServiceProvider为核心的依赖注入框架,虽然这只 ...
- 如何在Java生态圈选择一个轻量级的RESTful框架?
在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在性能需要的时候及时地创建更多的服务单元.微服务 ...
- 一个轻量级分布式RPC框架--NettyRpc
1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...
- 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
ASP.NET Core具有一个以ServiceCollection和ServiceProvider为核心的依赖注入框架,虽然这只是一个很轻量级的框架,但是在大部分情况下能够满足我们的需要.不过我觉得 ...
- 一个轻量级分布式 RPC 框架 — NettyRpc
原文出处: 阿凡卢 1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个 ...
- 轻量级iOS安全框架:SSKeyChain
原文地址: http://blog.csdn.net/kmyhy/article/details/7261065 SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账 ...
- C++11实现一个轻量级的AOP框架
AOP介绍 AOP(Aspect-Oriented Programming,面向方面编程),可以解决面向对象编程中的一些问题,是OOP的一种有益补充.面向对象编程中的继承是一种从上而下的关系,不适合定 ...
- 学习ASP.NET MVC5的一个轻量级的NinJect框架学习的第二天
新建一个Abstract文件夹 放置一些抽象的类,如接口 我们通过该接口就可以得到对应类的相关信息, 不需要去管该数据如何存储,以及存储的位置,这就是存储库模式的本质 public i ...
随机推荐
- [BZOJ2820][Luogu2257]YY的GCD
BZOJ权限题 Luogu 题意:给出n,m,求: \[\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)\mbox{为质数}]\] 多组数据,\(n\le 10^7\) s ...
- 图文详解AO打印(标准模式)
一.概述 AO打印是英文Active-Online Print的简称,也称主动在线打印.打印前支持AO通讯协议的AO打印机(购买地址>>)首先通过普通网络与C-Lodop服务保持在线链 ...
- 【learning】多项式乘法&fft
[吐槽] 以前一直觉得这个东西十分高端完全不会qwq 但是向lyy.yxq.yww.dtz等dalao们学习之后发现这个东西的代码实现其实极其简洁 于是趁着还没有忘记赶紧来写一篇博 (说起来这篇东西的 ...
- iptables 学习
本博客是学习慕课网课程 用iptables搭建一套强大的安全防护盾 整理而成 iptables相当于在ip层挂载一个hook point对用户进行控制 组成: 四张表+ 五条链(hook point) ...
- Redis 桌面管理器
使用Redis桌面管理器,可以方便开发人员进行开发测试,对Redis存储内容进行可视化管理. 下载安装:https://redisdesktop.com/download 1. 为了方便测试,打开re ...
- CMake基本语法
CMake简介 CMake 是做什么的? CMake是一套类似于automake的跨平台辅助项目编译的工具. 我觉得语法更加简单易用. CMake的工作流程 CMake处理顶级目录的CMakeList ...
- segment fault异常及常见定位手段
问题背景 最近boot中遇到个用户态程序的segment fault异常,除了一句"Segment fault"打印外无其他任何打印.该问题复现概率较低,定位起来比较棘手.我们的b ...
- EOS 的世界里可能再也没有小偷了
EOS 针对以下两种情况设计了应急措施: 1. 账户被盗(私钥被盗或有权限的其他账户被盗) 2. 账户遗失(私钥遗失或有权限的其他账户遗失) ## 1.账户被盗 EOS 有可能会强制要求所有账户的 O ...
- ASP.NET MVC编程——控制器
每一个请求都会经过控制器处理,控制器中的每个方法被称为控制器操作,它处理具体的请求. 1操作输入参数 控制器的操作的输入参数可以是内置类型也可以是自定义类型. 2操作返回结果 结果类型 调用方法 备注 ...
- Python 中的登陆获取数据跳转页面(不含数据库)
简单表单和模板: import os.path import tornado.httpserver import tornado.ioloop import tornado.options impor ...