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();
¿Puedes intentar reescribir esto un poco más claramente? ¿Qué estás tratando de lograr o evitar? –
Estoy tratando de abrir una base de datos keepass desde una aplicación winform para usar información delicada sin dejarlos descifrados. – hotips
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. –