#keepass #kdbx #keepassx

rust-kpdb

Rust语言编写的KeePass 2和KeePassX数据库读写库

7个版本 (4个重大更新)

0.5.0 2023年8月7日
0.4.2 2020年3月13日
0.4.1 2019年12月26日
0.4.0 2017年12月30日
0.1.0 2017年1月23日

#462数据库接口

每月40 次下载

MIT/Apache

255KB
5K SLoC

Rust-kpdb

Rust语言编写的用于读写KeePass 2KeePassX数据库的库。

用法

要使用rust-kpdb,将以下内容添加到你的Cargo.toml文件中

[dependencies]
rust-kpdb = "0.5"

并将以下内容添加到你的crate根目录

extern crate kpdb;

示例

创建一个新的数据库,添加两个组和两个条目

use kpdb::{CompositeKey, Database, Entry, Group};

// Create a new database.
let key = CompositeKey::from_password("password");
let mut db = Database::new(&key);

// Create a new group named Email.
let mut email_group = Group::new("Email");
let email_group_uuid = email_group.uuid;

// Create an entry for ProtonMail and add it to the Email group.
let mut protonmail = Entry::new();
let protonmail_uuid = protonmail.uuid;
protonmail.set_title("ProtonMail");
protonmail.set_username("mailuser");
protonmail.set_password("mailpass");
protonmail.set_url("https://mail.protonmail.com");
email_group.add_entry(protonmail);

// Create a new group named VPN.
let mut vpn_group = Group::new("VPN");

// Create an entry for ProtonVPN and add it to the VPN group.
let mut protonvpn = Entry::new();
protonvpn.set_title("ProtonVPN");
protonvpn.set_username("vpnuser");
protonvpn.set_password("vpnpass");
protonvpn.set_url("https://prontvpn.com");
vpn_group.add_entry(protonvpn);

// Add the Email and VPN groups to the Root group.
db.root_group.add_group(email_group);
db.root_group.add_group(vpn_group);

// Find groups matching "email".
let groups = db.find_groups("email");
assert_eq!(groups.len(), 1);

// Find entries matching "proton".
let entries = db.find_entries("proton");
assert_eq!(entries.len(), 2);

// Retrieve a group by its UUID.
let group = db.get_group(email_group_uuid).unwrap();
assert_eq!(group.name, "Email");

// Retrieve an entry by its UUID.
let entry = db.get_entry(protonmail_uuid).unwrap();
assert_eq!(entry.title(), Some("ProtonMail"));
assert_eq!(entry.username(), Some("mailuser"));
assert_eq!(entry.password(), Some("mailpass"));
assert_eq!(entry.url(), Some("https://mail.protonmail.com"));
assert_eq!(entry.notes(), None);

使用密码"password"打开现有的KeePass数据库passwords.kdbx,打印它并将其保存到new.kdbx

use kpdb::{CompositeKey, Database};
use std::fs::File;

let mut file = File::open("passwords.kdbx").unwrap();
let key = CompositeKey::from_password("password");
let db = Database::open(&mut file, &key).unwrap();

println!("{:?}", db);

let mut file = File::create("new.kdbx").unwrap();
db.save(&mut file).unwrap();

使用密码"password"和密钥文件passwords.key打开现有的KeePass数据库passwords.kdbx,打印它并将其保存到new.kdbx

use kpdb::{CompositeKey, Database, KeyFile};
use std::fs::File;

let mut file = File::open("passwords.key").unwrap();
let key_file = KeyFile::open(&mut file).unwrap();
let key = CompositeKey::from_both("password", key_file);

let mut file = File::open("passwords.kdbx").unwrap();
let db = Database::open(&mut file, &key).unwrap();

println!("{:?}", db);

let mut file = File::create("new.kdbx").unwrap();
db.save(&mut file).unwrap();

未实现

以下功能目前尚未实现

  • KeePass 1数据库。

许可证

Rust-kpdb采用MIT和Apache 2.0许可证双许可,与Rust编译器相同的许可证。

贡献

欢迎贡献。通过提交pull请求,你同意在Rust-kpdb项目的许可证条款下提供你的工作。

依赖项

~6MB
~89K SLoC