Frage

Ich entwickle eine Anwendung, die Speicherung Geheimnisse in einer Datenbank benötigt.

Ich brauche eine portable Datenbank (zB Firebird, SQLite, usw.), wo die Daten verschlüsselt gespeichert oder passwortgeschützt oder beides ...

Lassen Sie uns nehmen als Beispiel , dass ich erstellen möchten ein Passwort-Manager. Ich muss speichern, dass Passwörter in einer Datenbank. Ich bin daran gewöhnt, einbetten Firebird zu verwenden, aber nicht für geheime Daten.

Eine andere Lösung ist die Datenbank natürlich zu verwenden und die Datenbank-Datei verschlüsseln, wenn ich eine Datei nicht verbunden, aber ich bin der Sicherheit oder Performance-Auswirkungen nicht sicher.

Was ist die beste Methode, die Sie empfehlen?

War es hilfreich?

Lösung

Es gibt ein Projekt SQLite-crypt genannt. Welche sollte die beste Wahl sein. sqlite db mit allen Daten auf der Festplatte verschlüsselt.

Andere Tipps

Sie können auch einen Blick auf SQL Server Compact Edition haben, die nur eine DLL erfordert und die Daten in einer einzigen Datei speichern, wie SQLite oder Access, Firebird, etc.

Es hat auch Verschlüsselungsfunktionen eingebaut.

Einige Referenzen:

Passwort-Verschlüsselung

Sehen Sie meine Antwort auf Ihre SO .

Ganz ehrlich? Verwenden Sie TrueCrypt oder KeePass .

ich mit CJM zustimmen, aber wenn Sie Ihre eigenen auf das Schreiben dead-Set sind, sollten Sie den Strom an Schreibzeit und entschlüsseln es bei Lesezeit verschlüsseln. Alle veröffentlichten Algorithmus, der etwas stark ist sollte die Dinge sicher.

Realbasic integrierte Unterstützung für mit verschlüsselten SQLite-Datenbanken arbeiten gut für mich auf ein paar Projekte gearbeitet hat.

Ich empfehle Ihnen, überprüfen SQLCipher (Full Disclosure, ich bin einer von die Entwickler!) Es ist eine freie und Open-Source-Implementierung von transparenter, Seite-Level-Verschlüsselung für SQLite. Die Implementierung ist ziemlich robust, es ist unter dem aktiven Entwicklung, und es ist sehr einfach zu bedienen (relativ gesehen).

Ich schließe ich den Vorschlag KeePass zu verwenden. Es ist ein großer Speicher für sensible Daten und macht eine ziemlich gute API. Hier ist ein Beispiel dafür, wie eine Standard-Keypass 2-Datenbank zu lesen:

var dbpath = @"C:\path\to\passwords.kdbx";
var masterpw = "Your$uper$tr0ngMst3rP@ssw0rd";

var ioConnInfo = new IOConnectionInfo { Path = dbpath };
var compKey = new CompositeKey();
compKey.AddUserKey(new KcpPassword(masterpw));

var db = new KeePassLib.PwDatabase();
db.Open(ioConnInfo, compKey, null);

var kpdata = from entry in db.RootGroup.GetEntries(true)
                select new
                {
                    Group = entry.ParentGroup.Name,
                    Title = entry.Strings.ReadSafe("Title"),
                    Username = entry.Strings.ReadSafe("UserName"),
                    Password = entry.Strings.ReadSafe("Password"),
                    URL = entry.Strings.ReadSafe("URL"),
                    Notes = entry.Strings.ReadSafe("Notes")

                };                                      
db.Close();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top