2016-12-07 2 views
1

Ich muss Offline-Login in meiner Anwendung implementieren.Ist derzeit speichern ich Passwörter in Schlüsselbund, die verwendet wurden, um mindestens einmal anmelden, wenn die App online ist Momentan überprüfe ich nicht die Benutzername-Passwort-Kombination. Wenn ich mehrere Benutzer für ein einzelnes Gerät habe, reicht das Speichern von Kennwörtern nicht aus. Kann also jemand von euch etwas vorschlagen, was ohne Sicherheitsverletzungen möglich ist?Wie können wir eine Benutzername-Passwort-Kombination im Schlüsselbund im verschlüsselten Format speichern

+0

Do yin alle Benutzer erinnern wollen oder einfach nur die letzten? – CZ54

+0

@bobby: müssen sich an alle Benutzer erinnern – iOSManiac

+2

Also ich empfehle Ihnen, das Passwort zu speichern, mit dem Login als Schlüssel. etwas wie: [email protected]/Passwort. Sie können den md5-Wert des Passcodes codieren, um die Sicherheit zu verbessern. – CZ54

Antwort

1

Ich schlage vor, Sie das Passwort zu speichern, mit der Anmeldung als Schlüssel. etwas wie: [email protected]/password.

Sie können den md5 Wert des Passcodes kodieren zur Verbesserung der Sicherheit zu

0

Sie können NSURLCredential verwenden hängen von dieser link

Shop

NSURLCredential *credential; 

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

Erhalten Sie Daten speichern

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

Sie können es in dem Gerät Schlüsselanhänger speichern, die sparen ausgelegt heikle Informationen. Laden Sie einen Wrapper von diesem Ray Wenderlich tutorial und verschlüsseln das Passwort mit 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]; 
} 

Passwort abzurufen:

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

Können wir das abgerufene Passwort mit dem richtigen Benutzernamen abgleichen? Ich habe mehrere Benutzer für das gleiche Gerät – iOSManiac

+0

Ja. Wenn Sie mehrere Kennwörter (und Benutzernamen) speichern müssen, benötigen Sie einen anderen Wrapper von Apple. Bitte beachten Sie diesen Link: http: //devmonologue.com/ios/ios/storing-sensitive-information-in-the-iphones-keychain/ Im Wesentlichen initialisieren Sie die keychain-Klasse mit einem benutzerspezifischen Initialisierer mit der Methode "initWithIdentifier:". – Alex

Verwandte Themen