用keychain保存用户的账号,密码,uuid

1.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/

3.接下来介绍SSKeychain的使用

Apple针对keychain也提供了丰富的开发文档说明,包括有Keychain Services Programming Guide

对于只需要保存用户名和密码等的应用来说,SSKeyChain可能更加适合,它对keychain做了相应的封装,接口相对来说更加简单。

github有相应的源码和简介以及使用方法:SSKeyChain源码。
https://github.com/samsoffes/sskeychain

4,导入SSKeychain的步骤
1》在git上下载项目,将SSKeychain.h和SSKeychain.m导入到自己的项目中
2》添加Security.framework到自己的项目中

5,示例代码

1》保存一个UUID字符串到钥匙串:

CFUUIDRef uuid = CFUUIDCreate(NULL);assert(uuid != NULL);CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);

[SSKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStr]
forService:@"com.yourapp.yourcompany"account:@"user"];

2》从钥匙串读取UUID:

NSString *retrieveuuid = [SSKeychainpasswordForService:@"com.yourapp.yourcompany"account:@"user"];

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

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

if ([error code] == SSKeychainErrorNotFound) {
NSLog(@"Passwordnot found");
}

注意: setPassword和passwordForSevice方法中的services 和 accounts 参数应该是一致的。

展开阅读全文

没有更多推荐了,返回首页