Frage

Ich brauche Datenbank-Passwörter in einer Konfigurationsdatei zu speichern. Aus offensichtlichen Gründen möchte ich sie verschlüsseln (vorzugsweise mit AES). Kennt jemand eine Delphi-Implementierung, die einfach in ein bestehendes Projekt zur Einführung mit> 10.000 Zeilen historisch gewachsen (URGH!) Quellcode?

Zur Verdeutlichung: Einfache Mittel, um das Gerät zu einem Projekt hinzugefügt, max hinzufügen. 5 Zeilen Code, wo die Konfigurationsdatei gelesen wird und mit ihr geschehen. Sollte nicht mehr als 15 Minuten dauern.

Eine weitere Klarstellung: Das Passwort ist erforderlich, um eine Verbindung mit dem db zu erstellen, keine Benutzerverwaltung für die Anwendung zu unterstützen. So Hashes mit Hilfe nicht. Die DB-Engine überprüft, ob das Passwort gültig ist, nicht die App.

War es hilfreich?

Lösung

Ich zweite Empfehlung für David Barton DCPCrypt Bibliothek . Ich habe es successfuly in mehreren Projekten verwendet, und es wird nicht mehr als 15 Minuten in Anspruch nehmen, nachdem Sie die Verwendungsbeispiele gelesen haben. Es nutzt MIT-Lizenz, so dass Sie es frei in kommerziellen Projekten und sonst nutzen können. DCPCrypt implementiert eine Reihe von Algorithmen, einschließlich Rijndael, die AES ist.

Es gibt viele googlable Stand-alone (Single-Unit) Implementierungen zu - die Frage ist, welche Sie vertrauen, es sei denn, Sie sind bereit, die correctedness einer bestimmten Bibliothek zu überprüfen, selbst

.

Andere Tipps

Für typische Authentifizierung, brauchen Sie nicht die Passwörter zu speichern, müssen Sie nur prüfen, ob das Passwort vom Benutzer eingegebene korrekt ist. Wenn das Ihr Fall ist, dann können Sie speichern nur eine Hash-Signatur (z MD5) statt und vergleichen Sie es mit der Unterschrift des eingegebenen Passwortes. Wenn die beiden Signaturen übereinstimmen das eingegebene Passwort korrekt ist.

verschlüsselte Passwörter speichern kann gefährlich sein, denn wenn jemand Ihr „Master“ Passwort bekommt sie Passwörter aller Benutzer abrufen können.

Wenn Sie sich entscheiden, MD5 verwenden Sie MessageDigest_5.pas, die kommt mit Delphi (zumindest ist es enthalten mit meiner Kopie von Delphi 2007) verwenden können. Es gibt auch andere Implementierungen mit Delphi-Quellcode Sie wählen können.

Ich denke, Turbopower LockBox eine ausgezeichnete Bibliothek für criptography ist:

http://sourceforge.net/projects/tplockbox/

Ich weiß nicht, ob es für Ihre Anwendungen zu groß ist, aber es ist sehr einfach zu bedienen und Sie können eine Zeichenfolge mit 5 Zeilen Code verschlüsseln. Es ist alles in den Beispielen.

TOndrej hat den richtigen Ansatz. Sie sollten nie ein Passwort mit einem reversiblen Chiffre speichern. Wie es richtig darauf hingewiesen wurde, wenn Ihr „Master“ Schlüssel jemals kompromittiert wurden, wird das gesamte System gefährdet. Mit Hilfe eines nicht umkehrbaren Hash, wie MD5, ist viel sicherer und Sie können den Hash-Wert als Klartext speichern. Einfach die eingegebene Passwort-Hash und es dann mit dem gespeicherten Hash vergleichen.

Ich habe immer Benutzer Turbopower Lockbox. Es funktioniert gut, und sehr einfach zu bedienen. Ich kann es tatsächlich nutzen für genau die gleiche Sache, ein Passwort in einer Config-Textdatei zu speichern.

http://sourceforge.net/projects/tplockbox/

Turbopower LockBox 3 (http://lockbox.seanbdurkin.id.au/) verwendet automatische salzen. Ich empfehle gegen Barton DCPCrypt weil die IV nicht gesalzen werden. In manchen Situationen ist dies ein sehr ernsten sercurity Fehler.

Im Gegensatz zu einer früheren commment, LB3 Implementierung von AES ist vollständig kompatibel mit dem Standard.

Ich habe diese Bibliothek , wirklich schnell hinzuzufügen. Aber Wiki zeigt einige Lösungen.

Auch wenn Sie verschlüsseln, so scheint es mir, dass Ihr Entschlüsselungsschlüssel sowie das verschlüsselte Passwort sowohl in die ausführbare Datei sein, die in keiner Weise bedeutet, dass nur Sicherheit durch Unklarheit. Jeder kann den Entschlüsselungsschlüssel und die verschlüsselten Passwörter nehmen und die rohen Passwörter generieren.

Was Sie wollen, ist ein Einweg-Hash.

Nur zur Erinnerung.

Wenn Sie mit anderen Krypta Libs zu interoperabel BMW verbaut werden ohne, dann DCP oder LockBox würde die Arbeit machen.

, wenn Sie brauchen es vollständig mit den rinjdael Spezifikationen kompatibel zu sein, vergessen freien Komponenten, sie sind irgendwie „lousy“ die meiste Zeit.

Wie andere haben darauf hingewiesen, für Authentifizierungszwecke sollten Sie die Kennwörter mit umkehrbarer Verschlüsselung vermeiden die Speicherung, das heißt Sie nur den Passwort-Hash gespeichert werden soll und überprüfen Sie die Hash-Wert des benutzerdefinierten Kennwort gegen den Hash Sie gespeichert haben. Doch dieser Ansatz hat einen Nachteil: es anfällig ist auf Rainbow-Tabelle Angriffe, sollte ein Angreifer habhaft Ihre Passwort-Speicher-Datenbank.

Was Sie tun sollten, speichern Sie die Hashes eines vorher gewählten (und geheimen) Salz Wert + Passwort. Das heißt, verketten, das Salz und das Kennwort ein, das Ergebnis Hash, und diesen Hash speichern. Bei der Authentifizierung, das Gleiche tun - verketten Ihren Salz-Wert und das benutzerdefinierte Kennwort, Hash, überprüfen Sie dann auf Gleichheit. Dies macht Rainbow-Table-Angriffe nicht machbar.

Natürlich, wenn die Benutzer-Passwörter über das Netzwerk senden (zum Beispiel, wenn Sie auf einer Web- oder Client-Server-Anwendung arbeiten), dann sollten Sie das Passwort nicht im Klartext über senden, so dass anstelle des Speichern Hash (Salz + Passwort) sollten Sie speichern und überprüfen gegen Hash (Salz + Hash (Passwort)), und lassen Sie Ihre Client pre-Hash den Benutzer bereitgestellte Passwort und dass man über das Netzwerk senden. Dies schützt Ihr Passwort für Benutzer als auch, sollte der Anwender (wie es viele tun) das gleiche Passwort für mehrere Zwecke wiederverwenden.

Ich empfehle eine Art von Salz verwenden. Bewahren Sie keine crypt (Passwort) in der Konfigurationsdatei, aber insted dieses Mitglieds crypt (Salz + Passwort). Als ‚Salz‘ können Sie etwas verwenden, das öffnen Datenbank erforderlich ist, z. B. db_name + user_name. Für Krypta Funktion können Sie einige bekannte algortithm wie AES verwenden können, Idee, DES, oder etwas so einfaches wie jedes Byte mit dem Byte aus einem anderen String XOR-Verknüpfung, wird diese Zeichenfolge Ihre Schlüssel sein. Um es anders zu lösen können Sie einige zufällige Bytes verwenden, und speichern sie.

So zu speichern:

  1. init_str: = 5 zufällige Bytes
  2. new_password: = Salz + Passwort // Salz: = db_name + user_name
  3. crypted_password = xor_bytes (init_str + new_password, 'mein keyphrase')
  4. crypted_password: = init_str + crypted_password
  5. store crypted_password in Config, da dies sein Bytes Sie hexify oder Base64 kann es

Und verbinden:

  1. Split-Daten, die aus Config in init_str und crypted_password
  2. new_password = xor_bytes (init_str + crypted_password, 'mein keyphrase')
  3. Passwort: = entfernen (db_name + user_name) von new_password

Nick ist natürlich richtig - Ich gehe davon aus nur Sie wissen, was Sie tun, wenn Sie sagen, Sie alle 15 Minuten verbringen wollen eine Sicherheitslösung auf die Umsetzung. Die DCPCrypt Bibliothek implementiert auch eine Reihe von Algorithmen Hashing, wenn Sie diesen (besser) Weg gehen zu entscheiden.

Ein paar Lösungen:

  • Sie das Passwort nicht speichern überhaupt. Wenn Die Datenbank unterstützt integrierte Authentifizierung, es verwenden. Der Prozess kann eingestellt werden, mit einem bestimmten laufen Identität und automatisch von der Datenbank authentifiziert
  • Verwenden Sie Windows Zertifikatspeicher und ein Zertifikat Ihr Passwort zu verschlüsseln. Wenn Sie den Schlüssel speichern verwendet Krypta Ihr Passwort in Ihrer Anwendung, Sie haben sehr wenig Sicherheit wie auch immer, Sie müssen auch den Schlüssel schützen.

Sie müssen es an einem Ort zu speichern, wo nur der aktuelle Benutzer acccess auch hat.

Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun:

  1. Speichern Sie sie in einem EFS verschlüsselte Datei .
  2. Sie sich in den lokale Speicher sichern .

Internet Explorer verwendet 2. Aber wenn Sie den lokalen Zugriff bekommen können, können Sie sowohl die 1. und 2. entschlüsseln, wenn Sie den richtigen Master-Schlüssel und Algorithmus haben (zum Beispiel, iepv können an den Internet Explorer Passwörter bekommen).

So:
Wenn Sie können, vermeiden Passwörter zu speichern.
Suchen Sie nach Alternativen (wie die Windows-Authentifizierung, Verzeichnisdienste, usw.) aus.

- jeroen

Eine einfache, aber für die meisten Anwendungen stark genug System wird von dieser Embarcadero Demo gegeben: https://edn.embarcadero.com/article/28325

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top