5 个版本
新增 0.8.0 | 2024 年 8 月 23 日 |
---|---|
0.0.4 | 2024 年 7 月 17 日 |
0.0.3 | 2024 年 7 月 5 日 |
0.0.2 | 2024 年 5 月 14 日 |
0.0.1 | 2024 年 4 月 29 日 |
#334 在 数据库接口
每月 47 次下载
用于 passlane
375KB
7.5K SLoC
keepass-ng
Rust KeePass 数据库文件解析器,用于 KDB、KDBX3 和 KDBX4,并支持实验性的 KDBX4 写入。
用法
打开数据库
use keepass_ng::{
db::{node_is_group, Entry, Node, NodeIterator},
error::DatabaseOpenError,
Database, DatabaseKey,
};
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 NodeIterator::new(&db.root).into_iter() {
if node_is_group(&node) {
println!(
"Saw group '{0}'",
node.borrow().get_title().unwrap_or("(no title)")
);
} else if let Some(e) = node.borrow().as_any().downcast_ref::<Entry>() {
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 数据结构将从该库的内部对象表示重新从头开始编写,因此任何未由库解析的字段将在输出文件中丢失!请在尝试此功能之前确保备份您的数据库。
您可以通过启用 save_kdbx4
功能来启用保存 KDBX4 数据库的实验性支持。
use keepass_ng::{
db::{group_add_child, Database, Entry, Group, Node, Value},
rc_refcell_node, DatabaseConfig, DatabaseKey, NodePtr,
};
use std::fs::File;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut db = Database::new(DatabaseConfig::default());
db.meta.database_name = Some("Demo database".to_string());
let entry = rc_refcell_node!(Entry::default());
if let Some(entry) = entry.borrow_mut().as_any_mut().downcast_mut::<Entry>() {
entry.set_title(Some("Demo entry"));
entry.set_username(Some("jdoe"));
entry.set_password(Some("hunter2"));
}
let group = rc_refcell_node!(Group::new("Demo group"));
group_add_child(&group, entry, 0).unwrap();
group_add_child(&db.root, group, 0).unwrap();
#[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-ng = "*" # TODO replace with current version
性能说明
请在编译时设置 RUSTFLAGS
环境变量以启用针对 CPU 的优化(这极大地影响了 AES 密钥派生的速度)
export RUSTFLAGS='-C target-cpu=native'
为了获得最佳结果,请还请在发布模式下编译。
或者,您可以在项目中添加一个 .cargo/config.toml
,以确保始终设置 rustflags。
对于 AArch64 / ARMv8
aes
优化尚未在稳定 Rust 中启用。如果您想获得大幅性能提升,可以使用夜间构建并启用 aes
crate 的 armv8
功能。
[dependencies.aes]
# Needs at least 0.7.5 for the feature
version = "0.7.5"
features = ["armv8"]
许可证
MIT
依赖项
~4–16MB
~159K SLoC