Хранить конфиденциальную информацию в базе данных keepass с c #

У меня есть проект, где я должен обрабатывать конфиденциальные данные. Вы знаете, как открыть форму базы данных keepass c # для использования данных?

Я загрузил источники. Я загляну туда, чтобы получить то, что мне нужно. любая другая идея?

Я подумал о чтении базы данных KeyPass 2, поэтому добавил ссылку на KeyPass.exe в Linqpad и начал экспериментировать. К моему удивлению и без какой-либо внешней помощи (свидетельство хорошего API), я читал базу данных всего через несколько минут. Вот как я это сделал:

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(); 

Проверьте: безопасный пароль KeePass (для того, как работает keepass)

Скорее используйте classы C # System.Cryptography и сохраните данные, зашифрованные в базе данных или файле txt …

Существует KeePass-2.05-Alpha-Source.zip, Последняя версия KeePass. C # исходный код, 1919 КБ

Вот продолжение первоначального ответа Ронни – рекурсивное хождение по дереву. Это выводит формат, который может использовать jsTree.

  public static void JsonData() { var dbpath = Web.MapPath(@"your-password-file.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); //get everything 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") }; var kproot = db.RootGroup.Groups; string lastGroup = "#"; uint sc = 0; int depth = 0; var parent = "#"; //root is # parent foreach (var entry in kproot) { PwGroup pwGroup = db.RootGroup.Groups.GetAt(sc); Web.Write(" { \"id\" : \"" + (sc) + "\", \"parent\" : \"" + parent + "\", \"text\" : \"" + pwGroup.Name.HtmlEncode() + "\" },\n"); WriteChildren(pwGroup,sc+"", depth + 1); sc++; } db.Close(); } public static void WriteChildren(PwGroup pwGroup, string parentID,int depth) { uint sc = 0; //if(depth>3)return; //used to prevent too much recursion foreach (var entry in pwGroup.Groups) { var subGroup = pwGroup.Groups.GetAt(sc); var curID = (parentID+"_"+sc); Web.Write(" { \"id\" : \"" + curID + "\", \"parent\" : \"" + parentID + "\", \"text\" : \"" + subGroup.Name.JsEncode() + "\"},\n"); WriteChildren(subGroup, curID, depth+1); WriteLeaves(subGroup, curID, depth); sc++; } } public static void WriteLeaves(PwGroup pwGroup, string parentID,int depth) { uint sc = 0; //if(depth>3)return; var entryList = pwGroup.GetEntries(false); foreach (var entry in entryList) { var curID = (parentID+"_"+sc); Web.Write(" { \"id\" : \"" + curID + "\", \"parent\" : \"" + parentID + "\", \"text\" : \"" + entry.Strings.ReadSafe("Title").JsEncode() + "\", \"password\" : \"" + entry.Strings.ReadSafe("Password").JsEncode() + "\", \"type\" : \"file\"},\n"); sc++; } }