如何在Java中使用 KeePass数据库(kdbx)
Keepass是一个免费的开源密码管理器,它可以帮助您安全地管理密码。您可以将所有密码放在一个数据库中,该数据库使用一个主密钥或密钥文件锁定。
KeePass有以下特性:
1、Keepass支持高级加密标准(aes,rijndael)和twofish算法来加密其密码数据库。这两种密码都被认为是非常安全的。例如,作为美国联邦政府标准,AES已生效,并获得国家安全局(NSA)的最高机密信息批准。
2、完整的数据库是加密的,而不仅仅是密码字段。因此,您的用户名、注释等也会被加密。
3、sha-256用于散列主密钥组件。sha-256是一个256位的加密安全单向哈希函数。目前还不知道针对SHA-256的攻击。使用密钥派生函数转换输出。
4、防止字典和猜测攻击:通过使用密钥派生函数(aes-kdf、argon2,…)转换主密钥组件哈希,字典和猜测攻击会变得更加困难。
5、进程内存保护:在keepass运行时对密码进行加密,因此即使操作系统将keepass进程转储到磁盘上,也不会显示密码。
6、受内存流保护:加载内部XML格式时,使用会话密钥加密密码。
7、安全增强的密码编辑控件:Keepass是第一个具有安全增强的密码编辑控件的密码管理器。所有可用的密码编辑控件间谍都不能对抗这些控件。这些控件中输入的密码在keepass的进程内存中甚至不可见。
8、主密钥对话框可以显示在一个安全桌面上,在这个桌面上几乎没有键盘记录器工作。自动类型也可以防止键盘记录器。
由于应用程序使用公共逻辑,所以有库用不同的编程语言来操纵这种文件,Java也不例外。在本文中,我们将解释如何用Java操纵KeaPASS数据库,既可以创建自己的类似应用程序,也可以从KDBX文件中提取信息。
第一步:安装keepass库
为了使用keepass数据库,需要安装openkeepass库。OpenKeePass是一个用于读取和写入KeePass数据库的Java库。它是一个纯的Java库,支持KEPASS 2×x数据库文件。到目前为止,它以下方面提供支持:
1、Keepass 2.x的读写支持
2、密码或密钥文件凭据:OpenKeepass可以打开受密码保护的数据库以及受密钥文件保护的数据库。
3、Android支持:将在Android设备上运行。
4、易于学习的API:OpenKeepass有一个简单的API,它具有方便的方法,使从Keepass数据库中读取数据变得容易。
5、非常瘦:OpenKeepass试图将必要的依赖性保持到绝对最小。
6、向后兼容直到Java 6
您可以手动下载keepass库文件,如果您的项目是基于maven,直接修改pom.xml文件自己在maven,增加一下内容
<!-- https://mvnrepository.com/artifact/de.slackspace/openkeepass --> <dependency> <groupId>de.slackspace</groupId> <artifactId>openkeepass</artifactId> <version>0.8.1</version> </dependency>第二步:抽取信息
正如我们的代码世界中的每一件事一样,您将通过实践来学习,因此,当您尝试使用这些文件时,我们将向您解释如何处理最基本的需求:
1、打印所有凭据
如果您刚从某人那里获得了一个keepass数据库,并且您只需要在不考虑分类的情况下获取信息,那么您可以使用以下逻辑轻松地打印文件中存储的所有凭据:
package com.ourcodeworld.mavensandbox; // Import required class import 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 password KeePassFile database = KeePassDatabase .getInstance("C:\\Users\\sdkca\\Documents\\Database.kdbx") .openDatabase("12345"); // 2. Retrieve all entries List<Entry> entries = database.getEntries(); // 3. Print every entry for (Entry entry : entries) { System.out.println(" * Credential: " + entry.getTitle()...
点击查看剩余70%
网友评论0