2

我只是通过将 .exe 文件添加到我的项目中来使用 keepass 的香草库。从我的代码中,我正在访问 PwDatabase,如下所示:

var dbpath = @"\\MyPath\To\PersonalVault\PersonalVault.kdbx";
var masterpw = "myPassword";

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

从那里我想访问和读取我之前从 UI 上的“高级”选项卡手动添加的自定义字符串字段:

var entry = db.RootGroup.FindEntry(new KeePassLib.PwUuid(KeePassLib.Utility.MemUtil.HexStringToByteArray("97A51FE92F700D4FB665DC6AA7C9D67D")), true);
var customString = entry.Strings.Where(lookingFor => lookingFor.Key.Equals("customString")).FirstOrDefault().Value;

但是我最终在这里得到了一个空值。

关于我如何阅读这篇文章的任何建议,或者它只是没有通过香草 KeePass.exe 暴露出来吗?

4

1 回答 1

1

KeePass.exe UI 上的“条目”选项卡显示了存储在 PwEntry 中的数据(可在此处下载KeePass 源代码)以及保留的键名。保留键名称显示在下面的代码示例中。

KeePass.exe UI 上的“高级”选项卡存储带有自定义键名的字符串。因此,在代码中读取它们时,entry.Strings.ReadSafe("myCustomString") 可以工作(假设密码条目中存在具有该键名的自定义字符串)。下面是我尝试过的代码,它可以工作。

        var pwUuid = new KeePassLib.PwUuid(KeePassLib.Utility.MemUtil.HexStringToByteArray("F3A8DC6E93571944B485AA947C68FB5E"));
        var entry = db.RootGroup.FindEntry(pwUuid, true);
            
        // Reserved key names ("Entry" tab on KeyPass.exe)
        Console.WriteLine($"Title   : {entry.Strings.ReadSafe("Title")}");
        Console.WriteLine($"UserName: {entry.Strings.ReadSafe("UserName")}");
        Console.WriteLine($"Password: {entry.Strings.ReadSafe("Password")}");
        Console.WriteLine($"URL     : {entry.Strings.ReadSafe("URL")}");
        Console.WriteLine($"Notes   : {entry.Strings.ReadSafe("Notes")}");

        // Custom key names ("Advanced" tab on KeePass.exe)
        Console.WriteLine($"myCustomString: {entry.Strings.ReadSafe("myCustomString")}");    

这也让我想知道保留键名和自定义键名之间的冲突。正如预期的那样,如果我尝试使用保留键名创建自定义键,KeePass.exe UI 会显示错误。 在此处输入图像描述

于 2021-07-21T14:26:19.323 回答