Search code examples
c#securitykeepass

Store sensitive information inside keepass database from c#


I have a project where I have to handle sensitive data.

How do I open a keepass database from C# to use the data?

I have downloaded the source. I will look in it to get what I need. Any other idea?


Solution

  • I thought about reading a KeyPass 2 database so I added a reference to KeyPass.exe in Linqpad and started to experiment. To my surprise and without any outside help (a testament to a good API), I was reading the database after only a few minutes. Here's how I did it:

    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")
    
                    };                                                                                  
    
    kpdata.Dump(); // this is how Linqpad outputs stuff
    db.Close();