2011-01-13 14 views
12

Mam projekt, w którym muszę obsługiwać poufne dane. Czy wiesz, jak otworzyć formularz bazy danych masek, aby używać danych?Przechowuj poufne informacje w bazie danych keepass z C#

Pobrałem źródła. Spojrzę w to, dostanę to, czego potrzebuję. jakikolwiek inny pomysł?

+1

Czy możesz spróbować jeszcze raz napisać coś jeszcze? Co próbujesz osiągnąć lub czego uniknąć? –

+0

Próbuję otworzyć bazę danych bazy danych z aplikacji WinForm, aby używać poufnych informacji bez pozostawienia ich bez szyfrowania. – hotips

+0

Nigdy nie korzystałem z bazy danych keepass .. ale myślę, że przechowywanie zaszyfrowanych danych w bazach danych MSSQL jest również bezpieczne ... i łatwe do wdrożenia. Jednak jeśli korzystasz z zewnętrznego rozwiązania, musisz mieć api do obsługi danych. –

Odpowiedz

29

myślałem o przeczytaniu bazę KeyPass 2 więc dodałem odniesienie do KeyPass.exe w LINQPad i zaczął eksperymentować. Ku mojemu zdziwieniu i bez jakiejkolwiek zewnętrznej pomocy (testamentu dobrego API), czytałem bazę danych już po kilku minutach. Oto, jak to zrobiłem:

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

Jakie przestrzenie nazw musiałaś dołączyć? Używam C# w SSIS i dodałem odwołanie do KeePass.exe, a następnie dołączam KeePassLib.Keys, KeePass.Collections, itp., Ale nie jest to lubią linii db.RootGroup.GetEntries (true). – jared

+0

KeePassLib.Keys & KeePassLib.Serialization –

+0

** Podpowiedź: ** Możesz pozwolić LinqPad przechowywać główne hasło w kodzie demo poprzez menu ** Menedżera haseł ** w menu ** Plik **, a następnie pobrać je przez 'var masterpw = Util.GetPassword (" KeePassMaster ");' jak opisano [tutaj] (http://stackoverflow.com/a/12006038/1016343) bardziej szczegółowo. W ten sposób jest on przechowywany za pomocą CryptoAPI i możesz bezpiecznie przekazać kod demo bez konieczności dbania o usunięcie hasła. – Matt

Powiązane problemy