- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
KeePassJava2
是一个用Java
编写的API,用于操作KeePass
密码数据库
- KeePassJava2 是一个高度灵活且高效的Java库,专门设计用于与KeePass
2.x
密码数据库交互。- 它全面支持阅读和写入KeePass文件版本
3
和4
,并能读取版本1.x
的数据库。- 该库精心构建,确保了在
Java 8
及更高版本,包括Java
/Android
环境中的广泛应用。- 通过不依赖特定的Java Cryptography Extension (JCE)策略文件,KeePassJava2保持轻量级且易于集成,实现了跨平台的兼容性。
- 其开放源码许可(
Apache 2.0
)鼓励广泛的应用和定制。
Slogan : "Java API for KeePass Password Databases - Read/Write 2.x (File versions 3 and 4), Read 1.x" 。
KeePassJava2
作为一个库,并不直接运行一个独立的应用程序,因此没有传统意义上的“启动文件”。它的使用通常是嵌入到其他Java应用中。 开发者会在其应用的主类中或特定的服务初始化部分,通过引入KeePassJava2的依赖和调用相关API来开启密码数据库的管理和访问功能。 比如,典型的启动逻辑可能出现在应用的入口点或者服务加载阶段,涉及创建KdbxCreds对象和加载数据库的操作.
KeePassJava2 项目的名称由 KeePass 的作者 Dominik Reichl 友情授权。与 KeePass 项目无正式联系.
KeePass 实际上是由 Dominik 编写的代码定义的,这些代码是他创建和维护该项目时编写的.
database.newEntry(entryToCopy);
database.newGroup(groupToCopy);
从release 2.2开始,它需要Java 1.8。早期版本需要Java 1.7.
略 。
<dependencies>
<!-- https://github.com/jorabin/KeePassJava2 -->
<dependency>
<groupId>org.linguafranca.pwdb</groupId>
<artifactId>KeePassJava2</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.linguafranca.pwdb</groupId>
<artifactId>test</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>oss.sonatype.org-snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
package com;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.linguafranca.pwdb.Credentials;
import org.linguafranca.pwdb.Database;
import org.linguafranca.pwdb.Entry;
import org.linguafranca.pwdb.Group;
import org.linguafranca.pwdb.kdb.KdbCredentials;
import org.linguafranca.pwdb.kdbx.KdbxCredentials;
import org.linguafranca.pwdb.kdbx.KdbxCreds;
import org.linguafranca.pwdb.kdbx.KdbxStreamFormat;
import org.linguafranca.pwdb.kdbx.dom.DomDatabaseWrapper;
//import org.linguafranca.pwdb.kdbx.jackson.JacksonDatabase;
import org.linguafranca.pwdb.kdbx.jaxb.JaxbDatabase;
import org.linguafranca.pwdb.kdbx.simple.SimpleDatabase;
import org.linguafranca.pwdb.kdbx.simple.model.KeePassFile;
import org.linguafranca.pwdb.security.CipherAlgorithm;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
/**
* KeePass 数据读取
* @note
* KeePassJava2 项目的名称由 KeePass 的作者 Dominik Reichl 友情授权。与 KeePass 项目无正式联系。
* KeePass 实际上是由 Dominik 编写的代码定义的,这些代码是他创建和维护该项目时编写的。
* @reference-doc
* [1] https://github.com/jorabin/KeePassJava2
* [2] https://github.com/jorabin/KeePassJava2/blob/master/example/src/main/java/org/linguafranca/pwdb/kdbx/QuickStart.java
*/
@Slf4j
public class KeePassExample {
@SneakyThrows
public static void main(String[] args) {
String keepassFilePath = "D:\\Program-Data\\KeePass-Data\\xxxx-resource-accounts.kdbx";
byte [] passwordBytes = "123".getBytes();
//KdbxCreds credentials = new KdbxCreds("JNY#1638".getBytes());//[x]
KdbCredentials credentials = new KdbCredentials.Password( passwordBytes );
//InputStream inputStream = KeePassExample.class.getClass().getClassLoader().getResourceAsStream("test1.kdbx");
InputStream keepassFileInputStream = new FileInputStream( new File(keepassFilePath) );
/**
* 密码数据库被建模为三层抽象
* 数据库(Database)是记录的集合,其物理表示形式只需能够呈现为流即可。
* 条目(Entry)保存数据库中有价值的信息,而组允许将条目构建为集合(Collection),就像文件夹结构一样。
* 数据库有一个根组(RootGroup),通过跟踪根组的子组(Sub Group)可以浏览数据库的树形结构。
* 条目属于组(Group)。条目可以在组之间移动,组也可以在组之间移动。
* 但是,在一个数据库中创建的条目和组不能在未转换的情况下移动到另一个数据库:
* database.newEntry(entryToCopy);
* database.newGroup(groupToCopy);
*/
Database database = DomDatabaseWrapper.load(new KdbxCreds( passwordBytes ), keepassFileInputStream);
//不同的 Database 实现具有不同的特性,主要提现在速度上 | 例如 对于 JAXB 和 Simple 来说,加载时间是主要因素,而对于 DOM 实现来说,数据库遍历是主要因素
//Database database = SimpleDatabase.load(credentials, keepassFileInputStream);
//Database database = JaxbDatabase.load(credentials, keepassFileInputStream);
//Database database = DomDatabaseWrapper.load(credentials, keepassFileInputStream);
//Database database = JacksonDatabase.load(credentials, keepassFileInputStream);
KdbxStreamFormat streamFormat = (KdbxStreamFormat) database.getStreamFormat();
int databaseVersion = streamFormat.getStreamConfiguration().getVersion();//4
CipherAlgorithm cipherAlgorithm = streamFormat.getStreamConfiguration().getCipherAlgorithm();//"AES"
String databaseName = database.getName();
Group rootGroup = database.getRootGroup();
List<Group> generalGroupList = rootGroup.findGroups("General");//rootGroup.getGroups();
Group generalGroup = generalGroupList.get(0);
List<Group> groups = generalGroup.getGroups();
int groupsSize = groups.size();
log.info("GeneralGroup's groups size:{}", groupsSize);
if(groupsSize > 0){
groups.stream().forEach(group -> {
String groupName = group.getName();
List<Entry> entries = group.getEntries();// group.findEntries("mysql", true);
int entriesSize = group.getEntriesCount();
entries.stream().forEach(entry -> {
log.info("entry.path:{}", entry.toString() );///xxxx-resource-accounts-database/General/cn-dev/xxx-mysql
UUID uuid = entry.getUuid();
String path = entry.getPath();
String title = entry.getTitle();
String username = entry.getUsername();
String password = entry.getPassword();
String url = entry.getUrl();
String notes = entry.getNotes();
String cdcUserCustomField = entry.getProperty("CDC_USER");//自定义扩展字段
String cdcPasswordCustomField = entry.getProperty("CDC_PASSWORD");//自定义扩展字段
byte[] xxxCustomFileField = entry.getBinaryProperty("");
});
});
}
}
}
- https://keepass.info/index.html
- https://keepass.info/translations.html (汉化包)
- https://github.com/jorabin/KeePassJava2
- https://github.com/jorabin/KeePassJava2/blob/KeePassJava2-2.2.1/example/src/main/java/org/linguafranca/pwdb/kdbx/QuickStart.java
- https://github.com/jorabin/KeePassJava2/blob/KeePassJava2-2.2.1/example/src/test/java/org/linguafranca/pwdb/kdbx/SimpleQuickStartTest.java
- https://github.com/topics/keepass
- https://github.com/PhilippC/keepass2android : 4.9k star 2025.1.2
- https://play.google.com/store/apps/details?id=keepass2android.keepass2android&pli=1
- https://github.com/jorabin/KeePassJava2 : 254 star 2025.1.2
- https://mvnrepository.com/artifact/de.slackspace/openkeepass : 153 个 star(相比 KeePassJava2 项目的 254 个 star ,star数偏少),且项目更新慢
https://mvnrepository.com/artifact/de.slackspace/openkeepass : 153 个 star(相比 KeePassJava2 项目的 254 个 star ,star数偏少),且项目更新慢 。
最后此篇关于[密码管理/信息安全]KeePassJava客户端:KeePassJava2的文章就讲到这里了,如果你想了解更多关于[密码管理/信息安全]KeePassJava客户端:KeePassJava2的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我的第一个想法如下: 我在服务器上创建了一个中央 ServerSocket,所有应用程序都可以连接到该服务器。
我正在 Unity 中构建多人游戏。为此,我必须将一些值从客户端发送到两个或多个通过服务器连接的客户端。我想将其构建为服务器真实游戏。客户端将使用 Android,他们的数据将通过服务器同步(可能是一
练习 C 网络编程:我正在编写一个简单的 TCP 客户端-服务器应用程序,它应该将消息(在每个客户端的单独线程中)作为字符串从服务器发送到客户端并在客户端(稍后将成为控制台商店应用程序)。我首先发送消
我使用证书身份验证设置了 AWS Client VPN。我正在为客户端-客户端访问系统进行设置,基本上如 this AWS scenario/example 中所述.一切正常,如果我知道他们的 IP
我正在开发一个小型客户端1/客户端2、服务器(线程)TCP 游戏。在尝试处理延迟问题时,我意识到我的 transmitState() 中存在缺陷。它强制将不必要的信息传递到通讯流中,从而造成迟缓,将汽
来自文档:Configurable token lifetimes in Azure Active Directory (Public Preview) 它提到“ secret 客户端”,刷新 tok
Apollo 客户端开发工具无法连接到我的应用程序。我已在 ApolloClient 构造函数中将 connectToDevTools 传递为 true,但没有任何 react 。我也试过this p
我想在 Pod 内使用 Fabric8 kubernetes 客户端 (java)。如何获取部署集群的 kubernetes 客户端? 我可以使用该集群的 kubeconfig 文件获取任何集群的配置
我正在阅读 the security issue with Log4j我了解此产品受此漏洞影响。但是 Oracle 客户端 11.2 和 12 是否受此问题影响? 我找不到这些产品是否使用任何 Log
Eureka 服务器设置 pom.xml 1.8 Hoxton.SR1 org.springframework.cloud spring
我有一个点对点(客户端/服务器)设置(通过本地 LAN),它使用 Netty,一个 Java 网络框架。我使用原始 TCP/IP(例如,没有 HTTP)进行通信和传输。现在,根据要求,我们希望转向 T
上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能。 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应。 接下来要做的就是实现Modb
有没有办法将二维十六进制代码数组转换为 png 图像? 数组看起来像这样(只是更大) [ [ '#FF0000', '#00FF00' ], [ '#0000FF'
我是套接字编程的新手。每次我运行客户端程序时,它都会说“无法连接到服务器”。谁能告诉我我在哪里犯了错误。任何帮助将不胜感激。 这是client.c #include #include #inclu
我们在UNIX环境下制作了简单的client.c和server.c程序。我们使用它来传输一个简单的文本文件,首先打开它,然后读取它并使用 open、read 和 send 系统调用发送;在客户端,我接
当我的程序来自 my previous question正在响应客户端,它应该发送加密消息。 当客户端连接时,它会发送一条类似“YourMessage”的消息。现在我想做的是,当客户端连接时,应该以某
我正在使用 C 和 putty 编写客户端/服务器程序。两个 c 文件位于同一系统上。 我目前在向客户端写回其正在使用的框架以及打印我的框架时遇到问题。它打印出 3 0 9 8,但随后开始打印 134
我正在使用 C 中的 select() 制作一个模拟快餐或其他任何东西的客户端服务器。 我有客户随机点 1-5 种“食物”。服务器每 30 秒决定一次。所有客户最喜欢的食物是什么?他为那些客户提供服务
对于单机游戏,基本的游戏循环是(来源:维基百科) while( user doesn't exit ) check for user input run AI move enemies
1、CentOS安装TortoiseSVN 复制代码 代码如下: yum install -y subversion 2、SVN客户端命令
我是一名优秀的程序员,十分优秀!