如何读取 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 确实会显示错误。
我只是通过将 .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 确实会显示错误。