Могу ли я получить доступ к брелкам на iPhone?

В этом вопросе рассматривается шифрование данных на iPhone с помощью функции crypt (). В качестве альтернативы, есть ли брелок на iPhone, и если да, то какой код я бы использовал для доступа к нему, чтобы хранить данные для входа, а затем извлекать их для нас в приложении?

Существует брелок, который вы можете использовать – для кода лучше всего проверить пример приложения GenericKeychain от Apple:

Пример GenericKeychain

Еще одно замечание: API-интерфейсы keychain не работают в симуляторе при использовании более старых версий (2.x, 3.x) iPhone SDK. Это может сэкономить вам много разочарования при тестировании!

Мне очень нравится слой абстракции брелка Buzz Anderson’s Keychain, и я с нетерпением жду MYCrypto Jens Alfke, чтобы достичь полезного состояния. Последний делает компетентную работу по разрешению использования в Mac OS X и iPhone с использованием того же кода, хотя его функции только имитируют небольшое подмножество Keychain’s.

Вот что я использую для хранения пар ключ / значение в цепочке ключей. Обязательно добавьте в проект проект Security.framework

#import  // ------------------------------------------------------------------------- -(NSString *)getSecureValueForKey:(NSString *)key { /* Return a value from the keychain */ // Retrieve a value from the keychain NSDictionary *result; NSArray *keys = [[[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, kSecReturnAttributes, nil] autorelease]; NSArray *objects = [[[NSArray alloc] initWithObjects: (NSString *) kSecClassGenericPassword, key, kCFBooleanTrue, nil] autorelease]; NSDictionary *query = [[NSDictionary alloc] initWithObjects: objects forKeys: keys]; // Check if the value was found OSStatus status = SecItemCopyMatching((CFDictionaryRef) query, (CFTypeRef *) &result); [query release]; if (status != noErr) { // Value not found return nil; } else { // Value was found so return it NSString *value = (NSString *) [result objectForKey: (NSString *) kSecAttrGeneric]; return value; } } // ------------------------------------------------------------------------- -(bool)storeSecureValue:(NSString *)value forKey:(NSString *)key { /* Store a value in the keychain */ // Get the existing value for the key NSString *existingValue = [self getSecureValueForKey:key]; // Check if a value already exists for this key OSStatus status; if (existingValue) { // Value already exists, so update it NSArray *keys = [[[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, nil] autorelease]; NSArray *objects = [[[NSArray alloc] initWithObjects: (NSString *) kSecClassGenericPassword, key, nil] autorelease]; NSDictionary *query = [[[NSDictionary alloc] initWithObjects: objects forKeys: keys] autorelease]; status = SecItemUpdate((CFDictionaryRef) query, (CFDictionaryRef) [NSDictionary dictionaryWithObject:value forKey: (NSString *) kSecAttrGeneric]); } else { // Value does not exist, so add it NSArray *keys = [[[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, kSecAttrGeneric, nil] autorelease]; NSArray *objects = [[[NSArray alloc] initWithObjects: (NSString *) kSecClassGenericPassword, key, value, nil] autorelease]; NSDictionary *query = [[[NSDictionary alloc] initWithObjects: objects forKeys: keys] autorelease]; status = SecItemAdd((CFDictionaryRef) query, NULL); } // Check if the value was stored if (status != noErr) { // Value was not stored return false; } else { // Value was stored return true; } } 

Стоит отметить, что эти ключи / значения не будут удалены, если пользователь удалит ваше приложение. Если пользователь удалит ваше приложение, а затем переустановит его, ключ / значения все равно будут доступны.

Также помните, что при создании AppID, если вы хотите, чтобы более одного приложения обращались к одной и той же информации о цепочке ключей, вам необходимо сгенерировать wildcard AppID (##### … Com.prefix. *) …

С последней версией 1.2 образца GenericKeychain Apple предоставляет оболочку для ключей, которая также работает на iPhone Simulator. Ознакомьтесь с этой статьей для получения дополнительной информации: http://dev-metal.blogspot.com/2010/08/howto-use-keychain-in-iphone-sdk-to.html

Вот еще один хороший class-shell от Mr.Granoff https://github.com/granoff/Lockbox Спасибо

  • Метод sizeWithFont устарел. boundingRectWithSize возвращает неожиданное значение
  • Как программно предотвратить переключение Mac на hibernate?
  • Использование Swift CFunctionPointer для передачи обратного вызова API CoreMIDI
  • Взаимодействие за пределами UIView
  • Создать случайное число в пределах диапазона?
  • Получить нажатие кнопки внутри UITableViewCell
  • Добавить анимированное изображение Gif в Iphone UIImageView
  • Вам нужно создать NSAutoreleasePool в блоке в GCD?
  • Как работает новый механизм автоматического подсчета ссылок?
  • Как использовать performSelector: withObject: afterDelay: с примитивными типами в cocoa?
  • Отправить уведомление в центр уведомлений о горном льве
  • Interesting Posts

    Отражение: как получить общий метод?

    добавить метки «плавающей оси» в графике facet_wrap

    Угловой 2/4/5 – Устанавливает базовый href динамически

    Языки динамического типа по сравнению с языками статического типа

    Когда использовать абстрактный class или интерфейс?

    Как использовать складывание кофейных байтов

    C # .NET: получить права администратора?

    Как создать последовательный индекс на основе переменной группировки в фрейме данных

    Новая видеокарта, предотвращающая загрузку

    В порядке правопреемника в двоичном дереве поиска

    Неправильно ли распределять память в DLL и указывать на нее клиентское приложение?

    SpringBoot – создание файлов jar – нет classов автоматической настройки, найденных в META-INF / spring.factories

    applicationWillTerminate, когда он вызывается, а когда нет

    Как я могу вызвать :: std :: make_shared в classе с только защищенными или частными конструкторами?

    Слишком много использования памяти

    Давайте будем гением компьютера.