2011-01-13 3 views
12

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

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

+1

Можете ли вы попробовать переписать это немного более четко? Чего вы пытаетесь достичь или избежать? –

+0

Я пытаюсь открыть базу данных keepass из приложения winform, чтобы использовать конфиденциальную информацию, не оставляя их незашифрованными. – hotips

+0

Я никогда не использовал базу данных keepass .. но я думаю, что хранение зашифрованных данных в базах данных MSSQL также безопасно ... и прост в реализации. Однако, если вы используете стороннее решение, у них должно быть api для обработки своих данных. –

ответ

29

Я думал о чтении базы данных KeyPass 2, поэтому я добавил ссылку на 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(); 
+0

Какие пространства имен вам нужно включить? Я использую C# в SSIS и добавляю ссылку на KeePass.exe, затем включаю KeePassLib.Keys, KeePass.Collections и т. Д., Но это не нравится в строке db.RootGroup.GetEntries (true). – jared

+0

KeePassLib.Keys & KeePassLib.Serialization –

+0

** Подсказка: ** Вы можете позволить LinqPad хранить главный пароль в вашем демо-коде через пункт меню ** Менеджер паролей ** в меню ** Файл **, а затем получить его через 'var masterpw = Util.GetPassword (« KeePassMaster »);' как описано [здесь] (http://stackoverflow.com/a/12006038/1016343) более подробно. Таким образом, он хранится с помощью CryptoAPI, и вы можете спокойно отменить демонстрационный код, не заботясь об удалении пароля. – Matt

0

Проверил: KeePass Password Safe (Для получения информации KeePass работы)

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

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

Смежные вопросы