iOS应用中如何保存用户名和密码?

参考自:iOS: How to store username/password within an app?

你应该使用Keychain来保存用户名和密码。Apple提供了例子来存储和删除keychain项。

导入Security.framework,把KeychainItemWrapper .h & .m文件加入到工程中,在需要用到的keychain的地方导入.h文件,如下实例化一个类:

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];

使用如下的方法来保存用户名和密码:

[keychainItem setObject:@"password you are saving" forKey:kSecValueData];
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];

使用如下的方法来获取到它:

NSString *password = [keychainItem objectForKey:kSecValueData];
NSString *username = [keychainItem objectForKey:kSecAttrAccount];

使用如下的方法来删除:

[keychainItem resetKeychainItem];

在使用的kSecValueData来保存密码是,可能会出现崩溃,例如
Keychain Wrapper erminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[_NSZeroData _fastCharacterContents]

此处建议,使用kSecAttrService来代替kSecValueData。

在iOS8,使用Obj-c和ARC来使用keychain

  1. 从此处https://gist.github.com/dhoerl/1170641/download 获取要使用的keychainItemWrapper, 把KeychainItemWrapper.h 和 .m加入你的工程中。
  2. 加入 Security framework
  3. 导入#import “KeychainItemWrapper.h”
  4. 保存数据

    NSString *emailAdress = self.txtEmail.text;
    NSString *password = self.txtPasword.text;
    //because keychain saves password as NSData object
    NSData *pwdData = [paswoord dataUsingEncoding:NSUTF8StringEncoding];
    
    //Save item
    self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
    [self.keychainItem setObject:emailAdress forKey:(__bridge id)(kSecAttrAccount)];
    [self.keychainItem setObject:pwdData forKey:(__bridge id)(kSecValueData)];
    
  5. 读取数据

    self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
    
    self.txtEmail.text = [self.keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];
    
    //because label uses NSString and password is NSData object I convert
    NSData *pwdData = [self.keychainItem objectForKey:(__bridge id)(kSecValueData)];
    NSString *password = [[NSString alloc] initWithData:pwdData encoding:NSUTF8StringEncoding];
    self.txtPaswoord.text = password;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值