Ich muss Passwörter in NSString
objects speichern; Allerdings möchte ich sie irgendwie verschleiern, damit sie nicht direkt aus dem Speicher gelesen werden können.
Dies ist eine Mac OS X (10.5) Anwendung, aber eine Lösung, die auch auf dem iPhone funktioniert, würde sehr geschätzt werden.
Wenn Sie den Schlüsselbund zum Speichern von Passwörtern verwenden, können Sie anstelle des Passierens von Strings den undurchsichtigen Schlüsselbund SecKeychainItemRefs
verwenden und nur den Klartext an dem Punkt abrufen, an dem er benötigt wird. Auf diese Weise erwarten Mac-Benutzer auch, dass ihre Passwörter behandelt werden. Leider ohne zu wissen, warum Sie "Passwörter in NSString
objects" speichern müssen, kann ich nicht sagen, ob das wirklich stimmt: -)
Auf dem iPhone stoppt die Sandbox jeden, der auf Ihre Passwörter zugreift. auf dem Desktop ist es nicht so einfach.
Sie sollten die Passwörter als Hashes und nicht als Klartext speichern. Ich glaube, das wird Ihnen die gewünschten Ergebnisse bringen, ohne die Funktionalität zu beeinträchtigen. Der einzige Gedanke, den Sie niemals machen können, ist, erneut auf das Klartext-Passwort zuzugreifen - wenn Sie es auf Stärke analysieren oder es an einen anderen Dienst weitergeben möchten. Im Allgemeinen werden Hashes jedoch keine Funktionalität opfern.
Der folgende Code nimmt ein Passwort in rawPassword und speichert seinen SHA-1-Hash in passwordHash.
%Vor%Beachten Sie, dass hier keine Speicherverwaltung vorhanden ist.
Sehen Sie sich den Wikipedia-Eintrag für eine Erklärung des Passwortshashings an.
Es gibt viele Versionen desselben Codes um die Intertubes.
Ich denke, das Poster bezieht sich auf das Verschleiern des Passwortes im Speicher, so dass Sie nicht nur den Inhalt des ivar aus dem Speicher lesen können. Die GData-Bibliothek von Google hat nützlichen Code für die XOR-Passwörter, die als NSMutableData in Instanzvariablen gespeichert werden.
%Vor%Sie können das Passwort mit XOR speichern / wiederherstellen (siehe #password und #setUserCredentialsWithUsername: Passwort: Methoden in der gleichen Datei). XOR ist keine High-Tech-Verschlüsselung, aber es ist gut genug, um gelegentliches Schnüffeln zu verhindern. Im Fall des GData-Clients, in dem Sie möglicherweise ein langlebiges Service / Manager-Objekt in einer Anwendung haben, das einen Verweis auf die Passwortdaten enthält, halte ich dies für einen vernünftigen Ansatz.