2012-04-10 3 views
8

Ich muss vertrauliche Passwörter innerhalb des Codes speichern. Ich kann keine Hashing-Techniken verwenden, da das Passwort selbst benötigt wird. Wie kann ich diese Daten sicher in einer app.config-Datei speichern?Ist die app.config-Datei ein sicherer Ort zum Speichern von Kennwörtern?

Gibt es andere Möglichkeiten, wie ich das sicher erreichen könnte?

DPAPI und ProtectData Class ist keine Option, da die Schlüssel systemspezifisch sind, z. B .: Verbindungszeichenfolgen können für unterschiedliche Endbenutzersysteme nicht auf diese Weise gespeichert werden.

+6

Wie werden die Passwörter 'erforderlich'? Es könnte praktischer sein, _that_bug zu beseitigen. –

+2

Warum können Sie nicht stattdessen einen Hash speichern? Wie werden die Passwörter verwendet? –

+2

Ich habe eine gute Idee, Google verschlüsseln Konfigurationseinstellungen ... http://msdn.microsoft.com/en-us/library/ie/dtkwfdky.aspx – Lloyd

Antwort

7

Sie können DPAPI (Data Protection API) verwenden, um bestimmte Abschnitte Ihrer Konfigurationsdateien zu verschlüsseln. Ihr Code würde immer noch ConfigurationManager verwenden und die Entschlüsselung wird vom Framework übernommen. Weitere Informationen auf der gleichen auf diese Muster und Praktiken Dokument How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

aktualisieren

zum Verschlüsseln oder Entschlüsseln Informationen von Ihrem Code verweisen könnten Sie ProtectedData.Protect & ProtectedData.Unprotect verwenden. Dies kann als Teil einer benutzerdefinierten Aktion in Ihrem Installationsprogramm ausgeführt werden oder wenn der Benutzer die Anmeldeinformationen eingibt, wenn er Ihre Anwendung verwendet.

Beispielcode

class SecureStringManager 
{ 
    readonly Encoding _encoding = Encoding.Unicode; 

    public string Unprotect(string encryptedString) 
    { 
     byte[] protectedData = Convert.FromBase64String(encryptedString); 
     byte[] unprotectedData = ProtectedData.Unprotect(protectedData, 
      null, DataProtectionScope.CurrentUser); 

     return _encoding.GetString(unprotectedData); 
    } 

    public string Protect(string unprotectedString) 
    { 
     byte[] unprotectedData = _encoding.GetBytes(unprotectedString); 
     byte[] protectedData = ProtectedData.Protect(unprotectedData, 
      null, DataProtectionScope.CurrentUser); 

     return Convert.ToBase64String(protectedData); 
    } 
}  
+0

Sie liegen falsch, Diese Methode ist nur nützlich für die Datei Web.config. Da die DPAPI - Schlüssel systemspezifisch sind, wird die korrekte Entschlüsselung in verschiedenen Systemen unterschiedlicher Endbenutzer nicht erreicht. – techno

+1

@techno Sie sollten eine benutzerdefinierte Installer - Aktion ausführen, die während der Installation oder bei der Eingabe des Benutzers erforderlich ist Detail zum ersten Mal. Meine Antwort wurde mit Beispielcode aktualisiert. – Ramesh

+0

Dies ist nicht möglich für Verbindungszeichenfolgen – techno