将任何对象保存到Keychain

时间:2013-06-17 09:17:16

标签: ios objective-c keychain

我想将可能包含敏感数据的对象保存到钥匙串中。为此,我将此对象转换为NSData实例。

我有点困惑我需要使用哪些属性。是否可以将 kSecClassGenericPassword 用作 kSecClass ,即使它不是真正的密码?此外,我设置了 kSecAttrAccount 。我在某处读过我还需要添加 kSecAttrService 。如果我不这样做会有什么影响呢?

3 个答案:

答案 0 :(得分:2)

在GitHub上结帐SSKeychain。这是一个很好的开源包装钥匙链,使它非常容易使用。如果您想更多地了解iOS / OS X上的钥匙串和安全性如何工作并且您已注册到Apple开发人员计划,那么您可以在developer.apple.com上查看的WWDC会话视频很少。

答案 1 :(得分:1)

Strongbox使用NSKeyedUnarchiver将任何类型转换为NSCoding转换为NSData对象,然后保存到keychain中。

答案 2 :(得分:0)

查看此库: https://github.com/nicklockwood/FXKeychain

- (BOOL)setObject:(id)object forKey:(id)key;
- (BOOL)setObject:(id)object forKeyedSubscript:(id)key;

基本示例:

#import "ViewController.h"
#import "FXKeychain.h"


@interface ViewController () <UITextFieldDelegate, UITextViewDelegate>

@property (nonatomic, strong) IBOutlet UITextField *keyField;
@property (nonatomic, strong) IBOutlet UITextView *dataField;

@end


@implementation ViewController

- (IBAction)save
{
    //save data
    [FXKeychain defaultKeychain][_keyField.text] = _dataField.text;
}

- (IBAction)load
{
    //load data
    _dataField.text = [FXKeychain defaultKeychain][_keyField.text];
}

- (IBAction)delete
{
    //clear field
    _dataField.text = @"";

    //delete data
    [[FXKeychain defaultKeychain] removeObjectForKey:_keyField.text];
}

- (IBAction)tap
{
    [_keyField resignFirstResponder];
    [_dataField resignFirstResponder];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

@end