2013-06-17 2 views
4

Я хочу сохранить объект, который может содержать конфиденциальные данные в цепочке ключей. Для этого я преобразую этот объект в экземпляр NSData.Сохранение любого объекта в Keychain

Я немного смущен, какие атрибуты мне нужно использовать. Можно ли использовать kSecClassGenericPassword как kSecClass, хотя это не пароль? Кроме того, я установил kSecAttrAccount. Я где-то читал, что мне также нужно добавить kSecAttrService. Какие последствия могут произойти, если я этого не сделаю?

+0

Я наткнулся на ту же проблему, я не могу хранить NSObject в цепочке ключей, похоже, что он может хранить только пароли. –

ответ

2

Оформить заказ SSKeychain на GitHub. Это хорошая оболочка с открытым исходным кодом для брелка, что делает его очень простым в использовании. Если вы хотите больше узнать о том, как работает брелок и безопасность в iOS/OS X, и вы зарегистрированы в Программе разработчиков Apple, есть несколько видеороликов сеансов WWDC, которые вы можете проверить на developer.apple.com.

+0

На самом деле я застрял в специальной реализации для доступа к цепочке ключей. Мой вопрос больше о том, можно ли ошибочно использовать kSecClassGenericPassword для арбиантного объекта или использовать какой-либо другой атрибут. – kukudas

+0

Есть список, который вы можете проверить в Справочнике по связям с ключевыми словами: http://developer.apple.com/library/mac/#documentation/Security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/uid/ TP30000898. –

+0

SSKeychain не работает для сохранения NSObject. – Rajesh

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 
1

Strongbox использует NSKeyedUnarchiver для преобразования любого типа соответствует NSCoding к объекту NSData перед сохранением в брелка.

Смежные вопросы