KeePass .kdbx database file parser for Rust
extern crate keepass;
use keepass::{Database, NodeRef, Result, Error};
fn main() -> Result<()> {
// Open KeePass database
let path = std::path::Path::new("tests/resources/test_db_with_password.kdbx");
let db = Database::open(
path, // the database
Some("demopass"), // password
None // keyfile
)?;
// Iterate over all Groups and Nodes
for node in &db.root {
match node {
NodeRef::Group(g) => {
println!("Saw group '{0}'", g.name);
},
NodeRef::Entry(e) => {
let title = e.get_title().unwrap();
let user = e.get_username().unwrap();
let pass = e.get_password().unwrap();
println!("Entry '{0}': '{1}' : '{2}'", title, user, pass);
}
}
}
Ok(())
}
Add the following to the dependencies
section of your Cargo.toml
:
[dependencies]
keepass = "*"
Performance note: Please set the RUSTFLAGS
environment variable when compiling to enable CPU-specific optimizations (this greatly affects the speed of the AES key derivation):
export RUSTFLAGS='-C target-cpu=native'
For best results, also compile in Release mode.
Alternatively, you can add a .cargo/config.toml
like in this project to ensure that rustflags are always set.
This library contains an optionally-compiled command line application to dump out the internal XML representation from a KDBX database. This can be useful for implementing additional features for the XML parser.
Since the tool depends on additional crates, it is not compiled until you specify the utilities
feature, e.g.
cargo run --release --features "utilities" --bin kp-dump-xml -- path/to/database.kdbx
MIT