钥匙串的使用——使用钥匙串进行保存本地密码
来源:互联网 发布:凝聚力软件开发 编辑:程序博客网 时间:2024/05/02 05:07
为了使保存的本地密码更安全,我们需要使用钥匙串进行保存本地加密后的密码,苹果7.03之后自带了钥匙串。但是使用比较麻烦,全部使用c语言。我们可以使用别人封装好的SSKeychain框架即可使用,具体用法如下:
导入SSKeychain框架后可以直接使用的常用方法:
删除保存在钥匙串里的密码(很少用)
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
获得保存在钥匙串里的密码
参数:
第一个参数:用户密码的明文
第二个参数:登录的服务名(在钥匙串中访问独立)
第三个参数:用户的用户名
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
将密码保存在钥匙串中
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
获得保存在钥匙串里的所有服务信息,但是没有密码
+ (NSArray *)allAccounts;
具体代码如下:
先拖进SSKeyChain框架,工程使用如下:
<span style="font-size:18px;">//// ViewController.m// POST登录//// Created by apple on 15/10/28.// Copyright (c) 2015年 LiuXun. All rights reserved.///** 导入SSKeychain框架后可以直接使用的常用方法: 删除保存在钥匙串里的密码(很少用) + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account; + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error; 获得保存在钥匙串里的密码 + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account; + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error; 将密码保存在钥匙串中 + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account; + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error; 获得保存在钥匙串里的所有服务信息,但是没有密码 + (NSArray *)allAccounts; *//** 加密的原则: 1、在网络传输过程中,没有传递带密码的明文(md5+hmac+加盐) 2、在本地没有存储密码的明文(钥匙串 但是钥匙串只有在7.0.3版本) */#define KLoginUserNameKey @"KLoginUserNameKey"#define kLoginServiceName @"kLoginServiceName"#import "ViewController.h"#import "NSString+Hash.h"#import "SSKeychain.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UITextField *nameText;@property (weak, nonatomic) IBOutlet UITextField *pwdText;@end@implementation ViewController-(void)viewDidLoad{ // 取出用户偏好设置保存的用户信息 self.nameText.text = [[NSUserDefaults standardUserDefaults] stringForKey:KLoginUserNameKey]; NSLog(@"%@", NSHomeDirectory()); // 查看钥匙串里面的服务信息 NSLog(@"%@", [SSKeychain allAccounts]); // 取出钥匙串里面的信息 if (self.nameText.text.length > 0) { NSString *pwd = [SSKeychain passwordForService:kLoginServiceName account:self.nameText.text]; self.pwdText.text = pwd; }}// 加盐的方式static NSString *salt = @"DIUTY$%^$&^&^&&*((%$$)%~!@~~MUE(*&YWYHS{}&*&))()()";- (IBAction)Click{ // 对密码进行md5 加密 // 加盐———在国内用的最多 // 注意:盐要足够长,足够复杂,足够保密 NSString *username = self.nameText.text; //1. 直接加密 // NSString *pass = [self.pwdText.text md5String]; // 2. 加盐的方式 // NSString *pass = [[self.pwdText.text stringByAppendingString:salt] md5String]; // NSLog(@"%@", pass); // 3. HMAC+MD5 更靠谱 HMAC本身也是一种加密算法 NSString *pass = [self.pwdText.text hmacMD5StringWithKey:@"hello"]; NSLog(@"%@", pass); // 1. url NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php"]; // 2. POST必须是可变的请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f]; request.HTTPMethod = @"POST"; // POST 请求不需要进行百分号转义 NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@",username, pass]; request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; // 3. 连接 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 反序列化 NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; NSLog(@"%@", result); if ([result [@"userId"] intValue] >0) { // 登录成功,记录用户的信息到偏好设置 [[NSUserDefaults standardUserDefaults] setObject:username forKey:KLoginUserNameKey]; // 为了即时保存,需要同步 [[NSUserDefaults standardUserDefaults] synchronize]; // /** 参数: 第一个参数:用户密码的明文 第二个参数 :登录的服务名(在钥匙串中访问独立) 第三个参数:用户的用户名 */ [SSKeychain setPassword:self.pwdText.text forService:kLoginServiceName account:self.nameText.text]; } }]; }@end</span>注意:用户账号不需要加密,保存到本地设置即可。密码需要保存到钥匙串。运行结果如下:
- 钥匙串的使用——使用钥匙串进行保存本地密码
- 想使用“本地项目” 的钥匙串
- IOS中使用sskeychain调用keychain(钥匙串)保存密码
- 钥匙串KeyChain的使用
- 钥匙串使用
- IOS在钥匙串里保存APP的账号密码
- iOS中使用钥匙串
- iOS中使用钥匙串
- ios 利用钥匙串保存密码和获取密码
- iOS 钥匙串保存UUID
- IOS 用keychain(钥匙串)保存用户名和密码
- IOS 用keychain(钥匙串)保存用户名和密码
- 用keychain(钥匙串)保存用户名和密码
- IOS 用keychain(钥匙串)保存用户名和密码
- Mac 修改AppleID 使用“登录”钥匙串
- iOS的KeyChain(钥匙串)的使用
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- java基础学习笔记——I/O举例
- 看懂SqlServer查询计划
- iOS设置LaunchScreen后真机启动画面为黑屏的解决办法
- [****ViewController respondsToSelector:]: message sent to deallocated instance
- 数字在排序数组中出现的次数 (递进的方法整理)
- 钥匙串的使用——使用钥匙串进行保存本地密码
- java 冒泡排序
- 错误:403 forbidden
- 打麻将后感悟
- iOS 六种手势
- 用例设计大全(整理)
- 错误:_runWithMainScene:transitionContext:completion:
- Reactor模式和Preactor模式
- Android 编程下的代码混淆