首页 > IOS的钥匙串,确保本地隐私数据的安全

IOS的钥匙串,确保本地隐私数据的安全

* 苹果的"生态圈",钥匙串访问,使用 AES 256 加密算法,能够保证用户密码的安全

* 钥匙串访问SDK,是苹果在 `iOS 7.0.3` 版本以后公布的

* 钥匙串访问的接口是纯 C 语言的,但是,网络上有框架把它封装成 OC 的,使用相当简单!

* 钥匙串访问的密码保存在哪里?

    * 只有苹果知道!是为了进一步保障用户的密码安全!

* 钥匙串访问的第三方框架,是对 C 框架的封装。

 

框架地址

https://github.com/soffes/sskeychain

 

#import "SSKeychain.h"

 

 

/**

 *  从钥匙串读取数据  钥匙串是由两个参数确定唯一 值的 服务名  最好用程序的 bundleId

 *

 *  @param serviceName 存储 服务名 类似 key 可以随便写,建议用 bundleId

 *  @param account     账号,用户名,钥匙串访问中,可以保存很多账号,很多 app 的密码

 *  @param error       接收错误信息

 *

 *  @return 返回从钥匙串读取的内容

 */

 

+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;

+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;

 

/**

从钥匙串中删除对应 数据 返回 是否成功

 */

+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;

+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;

 

 

/**

    存储数据到钥匙串。  password  `明文`,加密工作苹果做了,用的是 AES 256 算法

 */

+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;

+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;

 

/**

返回钥匙串上所有的 account

 */

+ (NSArray *)allAccounts;

+ (NSArray *)allAccounts:(NSError *__autoreleasing *)error;

 

/**

返回钥匙串上所有的 serviceName

 */

+ (NSArray *)accountsForService:(NSString *)serviceName;

+ (NSArray *)accountsForService:(NSString *)serviceName error:(NSError *__autoreleasing *)error;

 

 

例子:将用户名保存到偏好设置,以 bundleId 和用户名   密码保存到钥匙串

 

#define JYUsernameKey @"JYUsernameKey"

#define JYUserpwdKey @"JYUserpwdKey"

- (void)saveUserInfo {

    

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:self.userName.text forKey:JYUsernameKey];

    // 从 iOS 8.0 开始,就不需要同步了

    [defaults synchronize];

    

    // 以 bundleId 和 用户名存储 密码到钥匙串

    NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;

    [SSKeychain setPassword:self.pwd.text forService:bundleId account:self.userName.text];

}

 

- (void)loadUserInfo {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    

    self.userName.text = [defaults stringForKey:JYUsernameKey];

    

    NSLog(@"===> %@", [SSKeychain allAccounts]);

    // 从钥匙串中获取用户密码

    NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;

    self.pwd.text = [SSKeychain passwordForService:bundleId account:self.userName.text];

}

 

 

转载于:https://www.cnblogs.com/weijingyun/p/4562410.html

更多相关:

  • //检查更新页面- (void)Renew{        NSDictionary *infoDic = [[NSBundle mainBundle]infoDictionary];        NSString *version = [infoDic valueForKey:@"CFBundleShortVersionStrin...

  • IOS开发数据库篇—SQLite模糊查询 一、示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 1 // 2 // YYPerson.h 3 // 03-模糊查询 4 // 5 // Created by apple on 14-7-27. 6 // C...

  • 现状:每日在进行系统之间的订单对账时,往往是这样的操作流程; 1.从外部系统拉取数据存入本地数据库; 2.查询本地订单数据集合localSet; 3.查询外部系统订单数据集合outerSet; 4.以本地localSet为基准,对照outerSet,进行遍历,将数据不一致(金额、状态等),或者localSet存在而outerSet不存...