#password #password-generator #password-manager #security #encryption

无标准库 psh

从一组输入中推导出确定性的密码的密码生成/管理库

4 个版本 (重大更改)

0.5.0 2023年3月18日
0.4.0 2023年2月14日
0.3.0 2022年12月23日
0.2.0 2022年12月20日

无标准库 中排名第 189

每月下载量 22
3 个 Crates 使用

MIT 许可证

35KB
707 代码行

概述

有关此库的设计哲学的序言,请参阅 GitHub 项目页面

psh 是一个密码生成和密码管理库,它可以为用户输入生成确定性密码。它可以将以前使用的别名及其密码推导设置以加密形式存储在其内部数据库中,数据库位于 $HOME/.psh.db

有一个二进制 crate psh-cli -- 一个利用 psh 功能的 CLI 工具。可以使用以下 cargo 命令安装

$ cargo install psh-cli

以下是如何在您的代码中使用 psh 的示例

use psh::{Psh, ZeroizingString, store::PshMemDb};

let master_password = ZeroizingString::new(
    "this_better_be_a_strong_password".to_string());
let psh = Psh::new(
        master_password,
        PshMemDb::new(),
    ).expect("Error initializing Psh");
let alias = ZeroizingString::new(
    "my_secret_box".to_string());
let password = psh.derive_password(&alias, None, None);

为了提高安全性,可以提供秘密

# use psh::{Psh, ZeroizingString, store::PshMemDb};
#
# let master_password = ZeroizingString::new(
#    "this_better_be_a_strong_password".to_string());
# let psh = Psh::new(
#         master_password,
#         PshMemDb::new(),
#     ).expect("Error initializing Psh");
# let alias = ZeroizingString::new(
#    "my_secret_box".to_string());
let secret = ZeroizingString::new(
    "an_easy_to_remember_secret_word".to_string());
let password = psh.derive_password(&alias, Some(secret), None);

derive_password() 的第三个参数是 CharSet

# use psh::{Psh, ZeroizingString, store::PshMemDb};
use psh::CharSet;
#
# let master_password = ZeroizingString::new(
#    "this_better_be_a_strong_password".to_string());
# let psh = Psh::new(
#         master_password,
#         PshMemDb::new(),
#     ).expect("Error initializing Psh");
# let alias = ZeroizingString::new(
#    "my_secret_box".to_string());
// This password should consist of [a-zA-Z0-9] characters only
let password = psh.derive_password(&alias, None, Some(CharSet::Reduced));

将别名及其设置存储/删除到/从 psh 数据库中

# use psh::{CharSet, Psh, ZeroizingString, store::PshMemDb};
#
# let master_password = ZeroizingString::new(
#    "this_better_be_a_strong_password".to_string());
let mut psh = Psh::new(
        master_password,
        PshMemDb::new(),
    ).expect("Error initializing Psh");
# let alias = ZeroizingString::new(
#    "my_secret_box".to_string());
let use_secret = true;
let charset = CharSet::RequireAll;
// Store alias
psh.append_alias_to_db(&alias, Some(use_secret), Some(charset))
    .expect("Error storing alias");
// Remove alias
psh.remove_alias_from_db(&alias)
    .expect("Error removing alias");

请注意,在上述示例中,使用了内存中的 PshMemDb 作为数据库后端。还有其他可用的后端:使用普通文件的 psh_db::PshDb 以及使用 LocalStorage Web API 的 psh_webdb::PshWebDb

依赖项

~4MB
~82K SLoC