Могу ли я получить доступ к брелкам на 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 возвращает неожиданное значение
  • К ARC или не к ARC? Каковы плюсы и минусы?
  • Круговые контрольные бары в IOS
  • UISwitch в ячейке UITableView
  • iPhone - UILabel, содержащий текст с несколькими шрифтами одновременно
  • Ошибка: протокол недоступен, сброс backtrace
  • Что такое Swift-эквивалент ответаSoSelector?
  • Как сделать кнопку перехвата надписью для перехвата событий?
  • Как кодировать Base64 на iPhone
  • как увеличить размер шрифта в UIWebView
  • Редактирование Info.plist возможно программно?
  • Давайте будем гением компьютера.