如何读取 keepass 中条目的自定义字符串字段?

How do I read the custom string fields of an Entry in keepass?

我只是通过将 .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 暴露出来吗?

KeePass.exe UI 上的“条目”选项卡显示了存储在 PwEntry(KeePass 源代码为 downloadable here)中的数据,其中包含保留的键名。保留键名称显示在下面的代码示例中。

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 确实会显示错误。