2016-12-07 4 views
1

Мне нужно реализовать автономный вход в моем приложении. В настоящее время я храню пароли в цепочке ключей, которые были использованы для входа в систему хотя бы один раз, когда приложение подключено к сети. прямо сейчас я не проверяю комбинацию паролей пользователей. Если у меня есть несколько пользователей для одного устройства, для хранения только паролей будет недостаточно. Так может ли кто-нибудь из вас предложить что-то, что можно сделать без каких-либо нарушений безопасности.Как мы можем сохранить комбинацию имени пользователя и пароля в keychain в зашифрованном формате

+0

Do инь хотят помнить всех пользователей или только последний? – CZ54

+0

@bobby: нужно помнить всех пользователей – iOSManiac

+2

Поэтому я предлагаю вам сохранить пароль, используя логин в качестве ключа. что-то вроде: [email protected]/password. Вы можете закодировать значение md5 кода доступа, чтобы повысить безопасность тоже – CZ54

ответ

1

Я предлагаю вам хранить пароль, используя логин в качестве ключа. что-то вроде: [email protected]/password.

Вы можете закодировать значение пароля md5 для повышения безопасности слишком

0

вы можете использовать NSURLCredential зависит от этого link

магазина

NSURLCredential *credential; 

credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent]; 
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace]; 

Получить хранилище данные

NSURLCredential *credential; 
NSDictionary *credentials; 

credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:self.loginProtectionSpace]; 
credential = [credentials.objectEnumerator nextObject]; 
NSLog(@"User %@ already connected with password %@", credential.user, credential.password); 
0

Вы можете сохранить его в брелоке устройства, которые предназначены для сохранения конфиденциальной информации. Загрузить обертку из этого Ray Wenderlich tutorial и шифровать пароль с SHA512

#import "KeychainWrapper.h" 
#include <CommonCrypto/CommonDigest.h> 

-(void)createSHA512andSaveToKeychain:(NSString*)unencryptedPasswd { 
    const char *passwdBytes= [unencryptedPasswd cStringUsingEncoding:NSUTF8StringEncoding]; 
    NSData *passwordData = [NSData dataWithBytes:passwdBytes length:unencryptedPasswd.length]; 
    uint8_t digest[CC_SHA512_DIGEST_LENGTH]; 
    CC_SHA512(passwordData.bytes, passwordData.length, digest); 
    NSMutableString *encryptedPasswd= [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2]; 
    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) { 
     [encryptedPasswd appendFormat:@"%02x", digest[i]]; 
    } 

    // Save the password in the device keychain 
    KeychainWrapper *keychainWrapper = [[KeychainWrapper alloc] init]; 
    [keychainWrapper mySetObject:encryptedPasswd forKey:(__bridge id)kSecValueData]; 
    [keychainWrapper writeToKeychain]; 
} 

Для получения пароля:

// Retrieve the pwd from the device keychain 
KeychainWrapper *keychainWrapper = [[KeychainWrapper alloc] init]; 
NSString *pwd = [keychainWrapper myObjectForKey:@"v_Data"]; 
+0

Можно ли совместить полученный пароль с правильным именем пользователя? У меня несколько пользователей для одного и того же устройства. – iOSManiac

+0

Да. Если вам нужно хранить несколько паролей (и имена пользователей), вам понадобится другая оболочка от Apple. См. Эту ссылку: http: //devmonologue.com/ios/ios/storing-sensitive-information-in-the-iphones-keychain/. В принципе, вы инициализируете класс keychain с помощью инициализатора, специфичного для пользователя, с использованием метода initWithIdentifier:. – Alex

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