MCPcopy Index your code
hub / github.com/cternes/openkeepass

github.com/cternes/openkeepass @openkeepass-0.8.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release openkeepass-0.8.2 ↗ · + Follow
921 symbols 3,910 edges 138 files 104 documented · 11% updated 5y agoopenkeepass-0.8.1 · 2018-05-11★ 1377 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Build Status

openkeepass

openkeepass is a java library for reading and writing KeePass databases. It is an intuitive java library that supports KeePass 2.x database files.

Only KeePass files created with version 2.x are supported. KeePass files created with version 1.x are NOT supported.

Features included so far:

  • Reading and writing support for KeePass 2.x
  • Password or Keyfile credentials: openkeepass can open password protected databases as well as keyfile protected databases.
  • Android Support: Will run on Android devices.
  • Easy to learn API: openkeepass has a simple API with convenient methods that makes it easy to read data from a KeePass database.
  • Very lean: openkeepass tries to keep the necessary dependencies to an absolute minimum.
  • Backward compatible until Java 6

Installation

The easiest way is to add openkeepass as a maven dependency.

<dependency>
    <groupId>de.slackspace</groupId>
    <artifactId>openkeepass</artifactId>
    <version>0.8.1</version>
</dependency>

Prerequisites

Before using this library make sure that you have the Java Cryptography Extension (JCE) installed on your system.

You can download JCE here:

Android

Android users should apply the following dependency to avoid an error regarding build-in xml libraries:

compile ('de.slackspace:openkeepass:0.6.0') {
    exclude module: 'stax'
    exclude module: 'stax-api'
    exclude module: 'xpp3'
}

Examples for reading

The basic usage is very simple. This example will show you how to retrieve all entries and the top groups of the KeePass database.

    // Open Database
    KeePassFile database = KeePassDatabase.getInstance("Database.kdbx").openDatabase("MasterPassword");

    // Retrieve all entries
    List<Entry> entries = database.getEntries();
    for (Entry entry : entries) {
        System.out.println("Title: " + entry.getTitle() + " Password: " + entry.getPassword());
    }

    // Retrieve all top groups
    List<Group> groups = database.getTopGroups();
    for (Group group : groups) {
        System.out.println(group.getName());
    }

You can also search for specific entries in the database:

    // Search for single entry
    Entry sampleEntry = database.getEntryByTitle("Sample Entry");
    System.out.println("Title: " + sampleEntry.getTitle() + " Password: " + sampleEntry.getPassword());

    // Search for all entries that contain 'Sample' in title
    List<Entry> entriesByTitle = database.getEntriesByTitle("Sample", false);
    for (Entry entry : entriesByTitle) {
        System.out.println("Title: " + entry.getTitle() + " Password: " + entry.getPassword());
    }

Open a database with a key file:

    // Open database with keyfile
    KeePassFile database = KeePassDatabase.getInstance("DatabaseProtectedByKeyfile.kdbx").openDatabase(new File("Keyfile.key"));

    // Print all entries        
    List<Entry> entries = database.getEntries();
    for (Entry entry : entries) {
        System.out.println(entry.getTitle() + ":" + entry.getPassword());
    }

Retrieve custom string fields (Advanced tab) from a database:

    // Retrieve all properties including custom string fields of an entry
    Set<Property> properties = database.getEntryByTitle("1st Entry").getProperties();
    for (Property property : properties) {
        System.out.println(property.getKey() + ":" + property.getValue());
    }

For more usages have a look into the unit test classes.

Examples for writing

If you want to start writing a new KeePass file from scratch you first have to build up your database model. This will be done using the provided builders. After the model has been constructed you can use the KeePassDatabase class to write the KeePass database to a stream.

    // Build KeePass model
    Group root = new GroupBuilder()
                    .addEntry(new EntryBuilder("First entry").username("Peter").password("Peters secret").build())
                    .addGroup(new GroupBuilder("Banking")
                            .addEntry(new EntryBuilder("Second entry").username("Paul").password("secret").build())
                            .build())
                    .build();

    KeePassFile keePassFile = new KeePassFileBuilder("writingDB")
                    .addTopGroups(root)
                    .build();

    // Write KeePass file to disk
    KeePassDatabase.write(keePassFile, "MasterPassword", new FileOutputStream("Database.kdbx"));

For more usages have a look into the unit test classes.

Extension points exported contracts — how you extend this code

ProtectionStrategy (Interface)
(no doc) [6 implementers]
src/main/java/de/slackspace/openkeepass/processor/ProtectionStrategy.java
KeyFileParser (Interface)
(no doc) [5 implementers]
src/main/java/de/slackspace/openkeepass/parser/KeyFileParser.java
BinariesContract (Interface)
(no doc) [5 implementers]
src/main/java/de/slackspace/openkeepass/domain/BinariesContract.java
KeePassFileElement (Interface)
(no doc) [5 implementers]
src/main/java/de/slackspace/openkeepass/domain/KeePassFileElement.java
CustomIconsContract (Interface)
(no doc) [4 implementers]
src/main/java/de/slackspace/openkeepass/domain/CustomIconsContract.java

Core symbols most depended-on inside this repo

build
called by 183
src/main/java/de/slackspace/openkeepass/domain/MetaBuilder.java
getInstance
called by 57
src/main/java/de/slackspace/openkeepass/KeePassDatabase.java
hexStringToByteArray
called by 53
src/main/java/de/slackspace/openkeepass/util/ByteUtils.java
openDatabase
called by 37
src/main/java/de/slackspace/openkeepass/KeePassDatabase.java
addGroup
called by 35
src/main/java/de/slackspace/openkeepass/domain/GroupBuilder.java
getGroups
called by 33
src/main/java/de/slackspace/openkeepass/domain/GroupContract.java
toByteArray
called by 33
src/main/java/de/slackspace/openkeepass/util/StreamUtils.java
getBytes
called by 27
src/main/java/de/slackspace/openkeepass/domain/KeyFileBytes.java

Shape

Method 782
Class 121
Interface 16
Enum 2

Languages

Java100%

Modules by API surface

src/main/java/de/slackspace/openkeepass/domain/KeePassHeader.java37 symbols
src/main/java/de/slackspace/openkeepass/domain/EntryBuilder.java37 symbols
src/main/java/de/slackspace/openkeepass/domain/Entry.java31 symbols
src/test/java/de/slackspace/openkeepass/api/KeepassDatabaseReaderTest.java29 symbols
src/main/java/de/slackspace/openkeepass/domain/MetaBuilder.java29 symbols
src/main/java/de/slackspace/openkeepass/domain/zipper/GroupZipper.java27 symbols
src/main/java/de/slackspace/openkeepass/domain/GroupBuilder.java23 symbols
src/main/java/de/slackspace/openkeepass/domain/Meta.java18 symbols
src/main/java/de/slackspace/openkeepass/domain/TimesBuilder.java17 symbols
src/main/java/de/slackspace/openkeepass/domain/EntryContract.java17 symbols
src/test/java/de/slackspace/openkeepass/parser/KeePassDatabaseXmlParserTest.java16 symbols
src/main/java/de/slackspace/openkeepass/domain/KeePassFile.java15 symbols

For agents

$ claude mcp add openkeepass \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact