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

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

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

 Shekhar_Pro13 янв. 2011 г., 14:10
я никогда не использовал базу данных keepass ... но я думаю, что хранение зашифрованных данных в базах данных MSSQL также безопасно ... и легко реализуемо. Однако, если вы используете стороннее решение, они должны иметь API для работы со своими данными.
 hotips13 янв. 2011 г., 14:09
Я пытаюсь открыть базу данных keepass из приложения winform, чтобы использовать конфиденциальную информацию, не оставляя ее незашифрованной.
 Randy Minder13 янв. 2011 г., 14:06
Можете ли вы попробовать переписать это немного более четко? Чего вы пытаетесь достичь или избежать?

Ответы на вопрос(3)

Решение Вопроса

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

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();
 Ronnie Overby09 февр. 2013 г., 20:54
KeePassLib.Keys & KeePassLib.Serialization
 jared22 янв. 2013 г., 21:34
Какие пространства имен вы должны были включить? Я использую C # в SSIS и добавил ссылку на KeePass.exe, затем включаю KeePassLib.Keys, KeePass.Collections и т. Д., Но ему не нравится строка db.RootGroup.GetEntries (true).
 Kiquenet10 сент. 2016 г., 18:14
Насколько безопасны безопасные значения masterpw? в app.config?
 Matt13 янв. 2016 г., 10:35
Подсказка: Вы можете позволить LinqPad сохранить мастер-пароль в вашем демонстрационном коде черезМенеджер паролей пункт меню вфайл меню, а затем получить его черезvar masterpw = Util.GetPassword("KeePassMaster"); как описаноВот более подробно. Таким образом, он сохраняется с помощью CryptoAPI, и вы можете безопасно выдать демонстрационный код, не заботясь об удалении пароля.
 Ronnie Overby10 нояб. 2018 г., 18:35
@hypnagogia Не все так просто: как защитить базу данных? Что означает «безопасный»? Хранение ключей нелегко сделать правильно. Я рекомендую хранить ваш ключ, используя технологию, которая предназначена для этой цели. DPAPI является популярным средством на компьютерах с Windows.

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

    public static void JsonData() {
        var dbpath = Web.MapPath(@"your-password-file.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);

        //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++;
        }
    }

KeePass Password Safe (Как работает keepass)

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

Есть KeePass-2.05-Alpha-Source.zip, последняя версия KeePass. Исходный код C #, 1919 КБ

http://s.pudn.com/upload_log_en.asp?e=1781366http://en.pudn.com/downloads175/sourcecode/windows/other/detail816102_en.html

Ваш ответ на вопрос