Question

Je développe une application qui a besoin de stocker des secrets dans une base de données.

J'ai besoin d'une base de données portable (comme Firebird, SQLite, etc.) où les données seront stockées sous forme cryptée ou mot de passe protégé, ou les deux ...

Prenons comme exemple que je veux créer un gestionnaire de mot de passe. Je aurai besoin que les mots de passe dans magasin une base de données. Je suis habitué à utiliser Intégrer Firebird, mais pas pour les données secrètes.

Une autre solution consiste à utiliser naturellement la base de données et crypter le fichier de base de données quand je ne suis pas connecté à un fichier, mais je ne suis pas sûr des conséquences sur la sécurité ou la performance.

Qu'est-ce que vous recommandez la meilleure méthode?

Était-ce utile?

La solution

Il y a un projet appelé sqlite-crypt. Ce qui devrait être votre meilleur pari. sqlite db avec toutes les données sur le disque crypté.

Autres conseils

Vous pouvez également jeter un oeil à SQL Server Compact Edition, qui ne nécessite qu'une DLL et va stocker les données dans un seul fichier, tout comme SQLite ou Access, Firebird, etc.

Il a également des capacités de chiffrement intégré.

Quelques références:

le cryptage par mot de passe

Voir ma réponse à votre question autre os SO .

Honnêtement? Utilisez TrueCrypt ou KeePass .

Je suis d'accord avec CJM, mais si vous êtes mort mis sur l'écriture de votre propre, vous devez chiffrer le flux en écriture du temps et le décrypter à lecture du temps. Tout algorithme publié qui est un peu fort devrait garder les choses en sécurité.

Prise en charge intégrée de REALbasic pour travailler avec des bases de données SQLite chiffrées a bien fonctionné pour moi sur quelques projets.

Je recommande fortement vérifier SQLCipher (divulgation complète, je suis l'un des les développeurs!) C'est une implémentation open source libre et de chiffrement transparent au niveau de la page pour SQLite. La mise en œuvre est assez robuste, il est en cours de développement, et il est très facile à utiliser (relativement parlant).

Je appuie la suggestion d'utiliser KeePass. Il est un grand magasin pour les données sensibles et expose une API assez bonne. Voici un exemple de la façon de lire une base de données standard Keypass 2:

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top