我想将可能包含敏感数据的对象保存到钥匙串中。为此,我将此对象转换为NSData实例。
我有点困惑我需要使用哪些属性。是否可以将 kSecClassGenericPassword 用作 kSecClass ,即使它不是真正的密码?此外,我设置了 kSecAttrAccount 。我在某处读过我还需要添加 kSecAttrService 。如果我不这样做会有什么影响呢?
答案 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