2009-02-07 16 views
25

Mam prostą aplikację opartą na szablonie "Aplikacja narzędziowa". Wyszukuje chroniony hasłem plik XML (przez NSXMLParser).Przechowywanie haseł w aplikacjach iPhone'a

Chcę zezwolić użytkownikowi na ustawienie nazwy użytkownika i hasła w "FlipsideView", jak bym to zrobił?

mam podstaw na miejscu, dwie skrzynki UITextField, których wartość zostanie ustawiona na stałą wartość, gdy ładunki view (stosując metodę viewWillAppear) i NSLog'd gdy widok jest zamknięta (NSLog jest tylko do testowania, oczywiście, w metodzie viewWillDisappear)

Jak przechowywać dane? Zerknąłem na dokumentację dla programistów i wygląda na to, że powinienem używać NSUserDefaults ..?

Odpowiedz

33

Zgadzam się z Benem. To jest dokładnie do czego służy Keychain.

W żadnym wypadku nie zapisałbym po prostu wartości domyślnych, jak sugeruje dbr. Jest to bardzo niepewne. W zasadzie przechowujesz swoje hasła na otwartej przestrzeni.

Oprócz przykładowy kod Apple, polecam również Buzza Andersona kod brelok: iPhone Keychain Code

+0

Idealne, dzięki! Jedna rzecz wskazana w komentarzach tej strony (która spowodowała błąd podczas kompilacji), musisz dołączyć iPhoneOS Security.framework, aby działał. – dbr

+0

To ma sens dla przechowywania hasła, ale co z przechowywaniem nazwy użytkownika (aby odzyskać hasło)? Coś, czego nie da się nadpisać na aktualizacjach aplikacji itp. Wydaje się bezsensowne przechowywanie w pamięciach użytkowników, jeśli jest to jedyna rzecz. –

4

Aha, NSUserDefaults wydaje się działać, i jest prosty w obsłudze, ale nie jest bezpieczny w najmniejszym:

password jest IBOutlet dla UITextField.

- (void)viewWillAppear:(BOOL)animated 
{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSString *pword = [prefs objectForKey:@"password"]; 
    password.text = uname; 
} 

- (void)viewWillDisappear:(BOOL)animated{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    [prefs setObject:password.text forKey:@"password"]; 
} 

Hasło jest przechowywane w postaci zwykłego tekstu w plist, więc byłoby to dość łatwe dla kogoś innego dostępu .. ale ta jest przydatna do przechowywania ustawień niewrażliwych.

Skończyło się na tym, aby zapisać nazwę użytkownika o nazwie i zapisał hasło, korzystając z odpowiedzi SFHFKeychainUtils keychain code z sierpnia.

+3

To jest bardzo niepewna. W zasadzie przechowujesz hasła na otwartej przestrzeni. – August

+0

Yeh, zupełnie zapomniałem o Keychainie .. Zaktualizowałem odpowiedź, aby powtórzyć, jak niepewna jest to – dbr

9

To jest dokładnie to, do czego Apple opracował Keychain. Za pomocą pęku kluczy możesz przechowywać swoje hasło w postaci zaszyfrowanej. Zobacz przykład Apple'a GenericKeychain.

Powiązane problemy