2011-01-13 7 views
12

Tengo un proyecto donde tengo que manejar datos confidenciales. ¿Sabes cómo abrir un formulario de base de datos keepass C# para usar los datos?Almacenar información confidencial dentro de la base de datos keepass desde C#

He descargado las fuentes. Lo buscaré para obtener lo que necesito. alguna otra idea?

+1

¿Puedes intentar reescribir esto un poco más claramente? ¿Qué estás tratando de lograr o evitar? –

+0

Estoy tratando de abrir una base de datos keepass desde una aplicación winform para usar información delicada sin dejarlos descifrados. – hotips

+0

Nunca he usado la base de datos keepass ... pero creo que el almacenamiento de datos encriptados en bases de datos MSSQL también es seguro ... y fácil de implementar. Sin embargo, si está utilizando una solución de terceros, debe tener una API para tratar sus datos. –

Respuesta

29

pensé en la lectura de una base de datos KeyPass 2 por lo que añade una referencia a KeyPass.exe en LINQPad y empecé a experimentar. Para mi sorpresa y sin ninguna ayuda externa (un testamento de una buena API), estaba leyendo la base de datos después de solo unos minutos. He aquí cómo lo hice:

var dbpath = @"C:\path\to\passwords.kdbx"; 
var masterpw = "[email protected]"; 

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") 

       };                     

kpdata.Dump(); // this is how Linqpad outputs stuff 
db.Close(); 
+0

¿Qué espacios de nombres debe incluir? Estoy usando C# en SSIS y agregué la referencia a KeePass.exe, luego incluí KeePassLib.Keys, KeePass.Collections, etc., pero no me gustó la línea db.RootGroup.GetEntries (true). – jared

+0

KeePassLib.Keys & KeePassLib.Serialization –

+0

** Sugerencia: ** Puede dejar que LinqPad almacene la contraseña maestra en su código de demostración a través del elemento de menú ** Administrador de contraseñas ** en el menú ** Archivo **, luego recupérelo a través de 'var masterpw = Util.GetPassword (" KeePassMaster ");' como se describe [aquí] (http://stackoverflow.com/a/12006038/1016343) con más detalle. De esta forma, se almacena con CryptoAPI y puede regalar el código de demostración sin tener que preocuparse por eliminar la contraseña. – Matt

Cuestiones relacionadas