2017-12-18 3 views
0

Ich versuche, eine Soft-Phone-Anwendung in .NET C# zu erstellen, und ich habe eine Mauer geschlagen, wenn es darum geht, Benutzernamen und Passwörter in der Anwendung zu speichern. Ich habe über die Verwendung von SQL Server nachgedacht, aber da ich mich nicht damit auskenne, das Passwort im Klartext zu speichern, frage ich mich, welche anderen Möglichkeiten es gibt, um das zu erreichen. Hier sind meine Zwänge, während dieses Programm zu entwickeln:Store Passwort für Third-Party-Login

  • muss sicher speichern Benutzername und Passwort-Informationen
  • Es kann nicht Passwort-Hash als das Kennwort auf einem anderen Server gesendet werden muss, um die Authentifizierung mit.
  • Anmeldeinformationen müssen zwischen den Ausführungen des Programms bestehen bleiben. Der Benutzer sollte seine Anmeldeinformationen nur einmal beim ersten Ausführen des Programms speichern müssen. Danach sollte das Programm bei jedem Laden des Programms automatisch die Benutzerinformationen laden und sich beim Server authentifizieren, ohne den Benutzer erneut nach dem Kennwort zu fragen.
  • Die Datenbank ist in die Anwendung selbst eingebettet, so dass sie lokal auf dem Computer des Benutzers gespeichert wird.

Dies ist das erste Mal, dass ich mit der Idee gespielt habe, eine Datenbankfunktion mit C# zu implementieren. Irgendwelche Vorschläge oder Empfehlungen sind willkommen. Ich bin vertrauter mit SQL, aber wenn es eine alternative Datenbank gibt, die besser mit dem, was ich versuche, arbeiten würde, wäre ich bereit, es auszuprobieren.

+0

Nun, Ihre ersten, zweiten und letzten Anforderungen schließen sich gegenseitig aus. Sie können ein Kennwort nicht sicher auf dem Computer des Clients speichern, wenn es nicht gehasht wird. Sie können es nicht sicher auf Ihrem eigenen Server speichern, wenn es nicht gehackt ist. –

+0

Hashing ist nur eine günstige Möglichkeit, Passwörter der aktuellen Eingaben (die Sie hashed/gesalzen haben) mit hashed/gesalzenem PW zu vergleichen, die Sie in Ihrer Datenbank speichern. Sie suchen wahrscheinlich eher nach einer reversiblen Verschlüsselung eines Passworts - denken Sie an PGP. Lassen Sie den Benutzer bei der ersten Ausführung einen privaten/öffentlichen Schlüssel erstellen, speichern Sie ihn im Windows-Keystore auf dem Client, und verwenden Sie ihn zum Verschlüsseln/Entschlüsseln der Benutzerdaten, bevor Sie ihn in einer SQL-Datenbank speichern. Wenn das Schlüsselpaar verloren geht, sind auch die gespeicherten Daten verloren - der Benutzer muss den Schlüssel neu erstellen und erneut speichern. Sagen Sie dem Benutzer, dass er seinen privaten Schlüssel nicht verteilen soll. Dies ist nur eine Abschreckung. –

+0

Jeder, der den Computer nimmt und das Windows-Login-PW knackt, hat Zugriff auf die Benutzer pwstore, wenn er als Benutzer läuft. Wahrscheinlich ist es sicherer, ihn einmal pro Sitzung seinen PW geben zu lassen. Sie können auch einfach Ihre eigene Krypto-DLL mit vorgefertigten Verschlüsselungs-/Entschlüsselungsmethoden und einem Schlüssel, den Sie in Ihrem Quellcode speichern, implementieren. Vielleicht verteilt, nicht so const, vielleicht mit Ersatz. Auch eine Abschreckung - wenn jemand hochentwickelt ist, um Ihren Speicher des Schlüssels und die verwendete Methode wieder umzuwandeln. –

Antwort

Verwandte Themen