本文概述
- 1.安装Open KeePass库
- 2.提取信息
- KeePass支持高级加密标准(AES, Rijndael)和Twofish算法来加密其密码数据库。这两种密码都被认为是非常安全的。 AES例如已成为美国联邦政府的标准, 并获得了国家安全局(NSA)的批准, 用于提供最高机密信息。
- 完整的数据库被加密, 而不仅仅是密码字段。因此, 你的用户名, 注释等也已加密。
- SHA-256用于哈希主密钥组件。 SHA-256是256位加密安全的单向哈希函数。尚无针对SHA-256的攻击。使用密钥推导函数转换输出。
- 防止字典和猜测攻击:通过使用密钥派生功能(AES-KDF, Argon2等)转换主密钥组件哈希, 可以使字典和猜测攻击变得更加困难。
- 进程内存保护:KeePass运行时会加密你的密码, 因此即使操作系统将KeePass进程转储到磁盘上, 也不会泄露你的密码。
- [2.x]受保护的内存中流:加载内部XML格式时, 使用会话密钥对密码进行加密。
- 安全性增强的密码编辑控件:KeePass是第一个具有安全性增强的密码编辑控件的密码管理器。没有可用的密码编辑控件间谍对这些控件起作用。在KeePass的过程存储器中甚至看不到在这些控件中输入的密码。
- 主密钥对话框可以显示在安全的桌面上, 几乎没有键盘记录程序在该桌面上运行。也可以保护自动键入免受键盘记录程序的攻击。
1.安装Open KeePass库 为了操作KeePass数据库, 你将需要安装openkeepass库。 openkeepass是一个用于读写KeePass数据库的Java库。它是一个直观的Java库, 支持KeePass 2.x数据库文件。到目前为止, 该库提供以下支持:
- 对KeePass 2.x的读写支持
- 密码或密钥文件凭据:openkeepass可以打开受密码保护的数据库以及受密钥文件保护的数据库。
- Android支持:将在Android设备上运行。
- 易于学习的API:openkeepass具有使用方便方法的简单API, 可轻松从KeePass数据库读取数据。
- 非常精简:openkeepass尝试将必要的依赖项保持在绝对最低限度。
- 向后兼容直到Java 6
<
!-- https://mvnrepository.com/artifact/de.slackspace/openkeepass -->
<
dependency>
<
groupId>
de.slackspace<
/groupId>
<
artifactId>
openkeepass<
/artifactId>
<
version>
0.8.1<
/version>
<
/dependency>
有关此项目的更多信息, 请访问Github上的官方资源库。
2.提取信息 就像我们《代码世界》中的所有内容一样, 你将边做边学, 因此, 当你尝试使用这些文件时, 我们将向你解释如何处理最基本的需求:
打印所有凭证
如果你只是从某人那里获得了KeePass数据库, 而你只需要获取信息而不必担心分类, 则可以使用以下逻辑轻松地将文件中所有存储的凭证打印出来:
package com.ourcodeworld.mavensandbox;
// Import required classimport de.slackspace.openkeepass.KeePassDatabase;
import de.slackspace.openkeepass.domain.Entry;
import de.slackspace.openkeepass.domain.KeePassFile;
import java.util.List;
public class Index {public static void main(String[] args){// 1. Open a KeePass database file through a plain text passwordKeePassFile database = KeePassDatabase.getInstance("C:\\Users\\sdkca\\Documents\\Database.kdbx").openDatabase("12345");
// 2. Retrieve all entriesList<
Entry>
entries = database.getEntries();
// 3. Print every entryfor (Entry entry : entries) {System.out.println("* Credential: " + entry.getTitle());
System.out.println("Username: " + entry.getUsername());
System.out.println("Password: " + entry.getPassword());
}}}
该逻辑将在终端中生成以下输出:
* Credential: Sample EntryUsername: User NamePassword: Password* Credential: Sample Entry #2Username: Michael321Password: 12345* Credential: Windows UserUsername: cheese@outlook.comPassword: 123456* Credential: Wi-FiUsername: bathousePassword: 654321* Credential: Contact EmailUsername: dev@ourcodeworld.comPassword: 123456* Credential: Info EmailUsername: info@ourcodeworld.comPassword: 123456789* Credential: Bank Of AmericaUsername: ourcodeworldPassword: 123456
以结构化方式打印信息(按组)
作为Keepass应用程序的常规用户, 我喜欢使用组和子组对存储在文件中的凭据进行分类。例如, 使用与工作相关的帐户将凭据与我的个人生活分开:
文章图片
你可以以这种方式提取信息, 以及首先按组进行迭代, 然后在组内获取条目:
package com.ourcodeworld.mavensandbox;
// Import required classimport de.slackspace.openkeepass.KeePassDatabase;
import de.slackspace.openkeepass.domain.Entry;
import de.slackspace.openkeepass.domain.Group;
import de.slackspace.openkeepass.domain.KeePassFile;
import java.util.List;
public class Index {public static void main(String[] args){// 1. Open a KeePass database file through a plain text passwordKeePassFile database = KeePassDatabase.getInstance("C:\\Users\\sdkca\\Documents\\Database.kdbx").openDatabase("12345");
// 2. Obtain the top groups in the databaseList<
Group>
keePassGroups = database.getTopGroups();
// 3. Iterate over themefor (Group group : keePassGroups) {// 4. Print the name of the GroupSystem.out.println(" - " + group.getName());
// 5. List credentials inside this groupList<
Entry>
groupEntries = group.getEntries();
// 6. Print every credential inside the groupfor (Entry entry : groupEntries) {System.out.println("* Credential: " + entry.getTitle());
System.out.println("Username: " + entry.getUsername());
System.out.println("Password: " + entry.getPassword());
}}}}
此代码将在终端中生成以下输出:
- Windows* Credential: Windows UserUsername: cheese@outlook.comPassword: 123456 - Network* Credential: Wi-FiUsername: bathousePassword: 654321 - eMail* Credential: Contact EmailUsername: dev@ourcodeworld.comPassword: 123456* Credential: Info EmailUsername: info@ourcodeworld.comPassword: 123456789 - Homebanking* Credential: Bank Of AmericaUsername: ourcodeworldPassword: 123456 - Recycle Bin
通过标题获得单个证书
由于没有通过ID或数字形式的索引, 因此从数据库中获取单个凭证的唯一方法是通过其标题, 例如:
package com.ourcodeworld.mavensandbox;
// Import required classimport de.slackspace.openkeepass.KeePassDatabase;
import de.slackspace.openkeepass.domain.Entry;
import de.slackspace.openkeepass.domain.KeePassFile;
import java.util.List;
public class Index {public static void main(String[] args){// 1. Open a KeePass database file through a plain text passwordKeePassFile database = KeePassDatabase.getInstance("C:\\Users\\sdkca\\Documents\\Database.kdbx").openDatabase("12345");
// 2. Find single credential by titleEntry sampleEntry = database.getEntryByTitle("Sample Entry");
System.out.println("Title: " + sampleEntry.getTitle() + " Password: " + sampleEntry.getPassword());
}}
这将在终端中打印:
Title: Sample Entry Password: Password
但是, 如果你拥有一个以上具有相同名称或包含相同字符串的凭证, 该怎么办?然后, 你将需要获取包含特定文本的条目, 并遍历结果以了解与搜索匹配的凭证:
package com.ourcodeworld.mavensandbox;
// Import required classimport de.slackspace.openkeepass.KeePassDatabase;
import de.slackspace.openkeepass.domain.Entry;
import de.slackspace.openkeepass.domain.KeePassFile;
import java.util.List;
public class Index {public static void main(String[] args){// 1. Open a KeePass database file through a plain text passwordKeePassFile database = KeePassDatabase.getInstance("C:\\Users\\sdkca\\Documents\\Database.kdbx").openDatabase("12345");
// 2. Search for all entries that contain 'Sample' in titleList<
Entry>
entriesByTitle = database.getEntriesByTitle("Sample", false);
for (Entry entry : entriesByTitle) {System.out.println("Title: " + entry.getTitle() + " Password: " + entry.getPassword());
}}}
将改为打印:
Title: Sample Entry Password: PasswordTitle: Sample Entry #2 Password: 12345
【如何在Java中操作KeePass数据库(kdbx)】编码愉快!
推荐阅读
- 常见的Java学习错误以及如何解决它们
- 如何使用ACE Editor将文本插入特定位置
- 如何在Laravel 5.4中实现PHP调试栏
- Linux基础_李孟_新浪博客
- 某团面试题(hashCode 的值是怎么生成的(对象内存地址吗?))
- python实现两台不同主机之间进行通信(客户端和服务端)——Socket
- vSphere7.0集群搭建项目实施笔记1---实施计划
- CentOS配置mailx通过465端口发送qq邮件
- 性能工具之15个常用的Linux文件系统命令