56 个版本

新版本 0.7.15 2024 年 8 月 23 日
0.7.13 2024 年 6 月 9 日
0.7.7 2024 年 3 月 2 日
0.6.16 2023 年 12 月 31 日
0.1.2 2016 年 3 月 1 日

#52数据库接口

Download history 189/week @ 2024-05-03 85/week @ 2024-05-10 499/week @ 2024-05-17 108/week @ 2024-05-24 142/week @ 2024-05-31 313/week @ 2024-06-07 98/week @ 2024-06-14 107/week @ 2024-06-21 51/week @ 2024-06-28 120/week @ 2024-07-05 95/week @ 2024-07-12 96/week @ 2024-07-19 123/week @ 2024-07-26 187/week @ 2024-08-02 113/week @ 2024-08-09 194/week @ 2024-08-16

632 每月下载量
8 crates 中使用

MIT 许可证

300KB
6.5K SLoC

keepass-rs

Crates.io Documentation Build Status codecov dependency status License file

Rust KeePass 数据库文件解析器,支持 KDB、KDBX3 和 KDBX4,以及实验性支持 KDBX4 写入。

用法

打开数据库

use keepass::{
    db::NodeRef,
    Database,
    DatabaseKey,
    error::DatabaseOpenError
};
use std::fs::File;

fn main() -> Result<(), DatabaseOpenError> {
    // Open KeePass database using a password (keyfile is also supported)
    let mut file = File::open("tests/resources/test_db_with_password.kdbx")?;
    let key = DatabaseKey::new().with_password("demopass");
    let db = Database::open(&mut file, key)?;

    // Iterate over all `Group`s and `Entry`s
    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_or("(no title)");
                let user = e.get_username().unwrap_or("(no username)");
                let pass = e.get_password().unwrap_or("(no password)");
                println!("Entry '{0}': '{1}' : '{2}'", title, user, pass);
            }
        }
    }

    Ok(())
}

保存 KDBX4 数据库(实验性)

重要: 内部 XML 数据结构将从该 crate 的内部对象表示重新从头开始编写,因此任何未由库解析的字段将在写入的输出文件中丢失!请在尝试此功能之前确保备份您的数据库。

您可以使用 save_kdbx4 功能启用保存 KDBX4 数据库的实验性支持。

use keepass::{
    db::{Database, Entry, Group, Node, NodeRef, Value},
    DatabaseKey,
};
use std::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut db = Database::new(Default::default());

    db.meta.database_name = Some("Demo database".to_string());

    let mut group = Group::new("Demo group");

    let mut entry = Entry::new();
    entry.fields.insert("Title".to_string(), Value::Unprotected("Demo entry".to_string()));
    entry.fields.insert("UserName".to_string(), Value::Unprotected("jdoe".to_string()));
    entry.fields.insert("Password".to_string(), Value::Protected("hunter2".as_bytes().into()));

    group.add_child(entry);

    db.root.add_child(group);

    #[cfg(feature = "save_kdbx4")]
    db.save(
        &mut File::create("demo.kdbx")?,
        DatabaseKey::new().with_password("demopass"),
    )?;

    Ok(())
}

使用开发者工具

此 crate 包含几个可以通过 utilities 功能标志启用的命令行工具。有关完整列表,请参阅 Cargo.toml 中的 [[bin]] 部分。

运行 kp-dump-xml 命令的示例命令行如下

cargo run --release --features "utilities" --bin kp-dump-xml -- path/to/database.kdbx

安装

将以下内容添加到您的 Cargo.toml 文件的 dependencies 部分

[dependencies]
keepass = "*" # TODO replace with current version

性能说明

请在编译时设置 RUSTFLAGS 环境变量以启用 CPU 特定的优化(这极大地影响了 AES 密钥导出的速度)

export RUSTFLAGS='-C target-cpu=native'

为了获得最佳效果,请以发布模式编译。

或者,您可以在项目中添加一个 .cargo/config.toml,以确保始终设置 rustflags。

对于 AArch64 / ARMv8

在稳定 rust 上尚未启用 aes 优化。如果您想要大幅提高性能,可以使用 nightly 构建并启用 aes crate 的 armv8 功能

[dependencies.aes]
# Needs at least 0.7.5 for the feature
version = "0.7.5"
features = ["armv8"]

许可证

MIT

依赖项

~4–13MB
~157K SLoC