我是前言:

最近在项目中需要使用钥匙串来进行账户密码的保存,小结一下。贴上框架地址:https://github.com/soffes/SAMKeychain。

它提供了5个类方法使用:

+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (void)setAccessibilityType:(CFTypeRef)accessibilityType;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;

1.关于keychain的功能介绍(可以略过)

keychain,中文翻译成钥匙串,可以算作是Apple一切从用户需求出发的一个例子吧。目前手机和电脑早已经不仅仅是打电话和上网这些功 能了,个人电脑或者智能手机可以看作是一个人的特征的标识,手机或者电脑中保存了大量用户所独有的数据信息,每个人都应当关注自己信息的保密问题。去年 CSDN网站被报到出用明文保存密码,并且被黑客获取,这也提醒着大家需要注意对密码的管理。

Apple应该很早就意识到了这样的问题,不过keychain项目也是几经波折才发展成现在这个样子。目前keychain的主要功能就是帮 助用户安全地记住他的密码,keychain保存的密码文件都是经过加密的,其它人不能直接通过打开keychain的文件获得保存在keychain中 的密码。在mac上可以安装钥匙串应用,一般情况下只有用户正确输入了mac系统的用户名和密码才能查看到用户保存在keychain中的密码。

Apple还提供了使用keychain保存密码的API,如果应用程序使用了keychain API来保存密码,保存密码的结果都可以在钥 匙串应用中查看到。Apple自带的浏览器Safari就是用的keychain来保存密码的,当用户在一个网页中输入了用户名和密码之后,Safari 会询问用户是否需要记住密码。如果用户选择记住Safari则会采用keychain进行密码的保存,在下次用户再次访问同一个网站的时候,系统会自动进 行用户名和密码的填充。同时在钥匙串程序中,可以看到Safari保存的针对特定网页的用户名,在输入了系统登录密码之后可以查看到对应的密码明文。

2.IOS中使用keychain和userdefaults保存数据的对比

userdefault适合保存一些轻量级的数据,使用userdefault保存的数据加载的时候要快一些,数据以明文的形式保存 在.plist文件中,不适合用来保存密码信息。文件的位置是Library/Application Support /iPhone Simulator/模拟器版本/Applications/应用对应的数字/Library/Preference/.plist文件

keychain采用的是将数据加密之后再保存到本地的,这样对数据而言有更高的安全性,适合保存密码之类的数据。数据保存的目录是 Library/Application Support/iPhone Simulator/模拟器版本/Library/Keychains/,主要的区别是你的应用在卸载之后userdefaults文件将被系统删除,但是钥匙串不会,当你再次安装应用到手机上,就可以直接读取到之前保存的数据了,当有这个需求的时候可以直接使用钥匙串保存,而且它的安全性更高。

3.SSKeyChain中的password,service,account的理解和使用

既然说到要用SSKeyChain来保存用户名和密码,那么需要使用到的SSKeyChain的功能应该就包括添加用户名和密码、删除用户名和密码、查询用户名和密码。

SSKeyChain的方法中涉及到的变量主要有三个,分别如这一小节的标题所示,是password、service、account。 password、account分别保存的是密码和用户名信息。service保存的是服务的类型,就是用户名和密码是为什么应用保存的一个标志。比如 一个用户可以再不同的论坛中使用相同的用户名和密码,那么service保存的信息分别标识不同的论坛。由于包名通常具有一定的唯一性,通常在程序中那个sever一般写你的app的bundleID的名称来作为service的标识。

下面两张图分别展示了测试代码和测试结果。setPassword的功能是保存account、service、password 的,accoutsForService是提取对应于特定service的所有accouts,从返回结果可以看出是返回结果是Array类型的,并且 Array的每一个元素是以key-value格式保存的数据。如果需要找出特定的用户名的话,需要使用valueForKey@“acct”来定位用户 名。(由于在这之前keychain已经保存了一个数据,所以lastObject对应的下标是2.)

在具体的使用过程中,根据需求,可以用在同一个service中保存多个用户名和密码,在需要提取的时候提取最后一个,或者根据用户名来提取特 定密码。也可以在同一个service中只保存一个用户名和密码,在需要保存新的用户名和密码的时候将原来保存的密码删除。

4.轻量级使用:

5.调试

如果无法保存钥匙串,请使用SSKeychain.h中提供的错误代码,例如:

NSError *error = nil;

NSString *password = [SSKeychainpasswordForService:@"MyService" account:@"samsoffes"error:&error];

if ([error code] == SSKeychainErrorNotFound) {

NSLog(@"Passwordnot found");

}

SSKeyChains的使用小节的更多相关文章

  1. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (六) 自动化测试结构小节

    上一篇‘e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录 ...

  2. htaccess 的使用基本小节 For apache httpd

    htaccess 的使用基本小节 For apache httpd .htaccess的基本作用 .htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令.       .ht ...

  3. day 6 - 1 知识点小节

    python2 与 python3 的区别 1. print.input.生成器 #python2 print() print 'abc' range() xrange() 生成器 raw_input ...

  4. L017-linux系统定时任务crond入门小节

    L017-linux系统定时任务crond入门小节 oh my god!how old are you? 怎么老是你?没错,我又来了,哈哈哈,今天是我的生日呢,在这么重要的日子里,必须要更一篇学习小节 ...

  5. L018-crond的生产场景经验小节

    L018-crond的生产场景经验小节 怎么说呢,其实L018这节课还是巩固crond的知识,前半堂课主要是解决上堂课老师留的作业(在L017已经更新,拉到最后),然后剩下的半堂客主要是讲解了一些生产 ...

  6. L016-linux系统文件权限体系实战深入讲解小节

    L016-linux系统文件权限体系实战深入讲解小节 不知道今天能不能写完哈,能写完发出来就是这周发两次小结了,有进步哦,不过L015和L016两节课内容也确实不多,进入正题 上一课学到了chmod. ...

  7. L014-第三关课前linux命令及基础知识考试手把手实战解答小节

    又是一周啊,以后保持一周一个微博吧. 这是一个堂解答考试题的课,那么就以题目来展开吧! 1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求用命令获得644这 ...

  8. L013-linux基础正则表达式手把手实战讲解小节

    L013-linux基础正则表达式手把手实战讲解小节 这么一看又有10天没更新博客了,最近也一直在学就是时间比较闲散,再加上做上次老师留的十多道题,所以时间比较紧张,本来做完题准备直接先看L014讲解 ...

  9. 《机器学习实战》6.2小节,KKT条件代码理解

    <机器学习实战>6.2小节 #这句是检测 当前样本点i 是否满足KKT条件的 if (alphas[i, :] < C and E_i * labelMat[i, :] < - ...

随机推荐

  1. android中listview的item滑动删除效果(已解决listview点击问题)

    领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...

  2. CPU/寄存器/内存

    因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing Unit(中央处理器). ...

  3. 整理 iOS 9 适配中出现的坑(图文)

    作者:董铂然 授权本站转载. 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iO ...

  4. VS2013发布web项目到IIS上遇到的问题总结

    vs2010发布网站到本地IIS的步骤  http://blog.csdn.net/cx_wzp/article/details/8805365 问题一:HTTP 错误 403.14 - Forbid ...

  5. MySQL下Limit使用及性能分析

    对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大. 先看表ibmng(id,title,info)  唯一  id key 索引title 先看 ...

  6. 8月1日起,这些新政将影响移动互联网产业-b

    今天,国家互联网信息办公室发布<移动互联网应用程序信息服务管理规定>.这项规定将从8月1日起生效,其中侧重对两类玩家提出了监管意见,他们分别是: 移动互联网应用程序提供者,即提供信息服务的 ...

  7. Docker 安装jupyter notebook

    1. 利用image运行一个container sudo docker run -it --net=host tingting --net=host:让container可以上网,安装原来的sudo ...

  8. 二分法查找(Binary Search)

    --摘要:二分法的介绍已经很多了,但并不直观,因此此文诞生,希望批评指正. 二分查找是在有序数组中查找一个元素的算法,通过比较目标元素与数组中间元素来查找,如果目标值是中间元素则将返回中间元素位置. ...

  9. 一个Bootstrap风格的分页控件

      http://www.cnblogs.com/wangwei123/p/3682626.html 主题 jQueryBootstrap 一个Bootstrap风格的分页控件,对于喜欢Bootstr ...

  10. linux下使用NFS挂载文件系统

    转自linux如何使用NFS挂载文件系统 设备:一台服务器和一台客户端,这里我们把装在PC机上的RedHat作为服务器,而客户端则是嵌入式linux开发板. 环境:开发板已启动,连接好串口和网线,串口 ...