#password #temporary #security #algorithm

no-std secwords

安全且安全的密码容器

8 个版本 (稳定版)

2.1.1 2021年9月7日
2.0.0 2021年9月6日
1.1.1 2021年9月4日
0.1.1 2021年8月31日

#1286算法

MIT/Apache

15KB
220

Secwords

CI Crates.io Licensed Twitter

安全且安全的密码容器。

  • 类型系统
  • 内存安全
  • Unicode 安全
    (支持 no-std)

| 文档 | 最新笔记 |

[dependencies]
secwords = "2.1.1"

[dependencies]
secwords = { version = "2.1.1", default-features = false } # no-std

如何

use secwords::Password;
use sha2::Sha256; // can be any hasher of dyn Digest `digest` crate

let plain = String::from("pa5$wOrs"); // <- example

let pass1 = Password::<Sha256, 6>::new(plain).unwrap(); // min length = 6
let pass2: Password<Sha256, 6> = "pa5$wOrs".parse().unwrap();

assert_eq!(pass1, pass2); // they are hashed, original is gone(safely)
assert_eq!(pass1.len(), 32); // fixed size `vep`(crate)
assert_eq!(pass1.as_ref(), pass2.as_slice());
assert_eq!(pass1.to_vec(), pass2.to_vec());

assert_eq!(pass1, "pa5$wOrs");
assert_eq!(pass1, String::from("pa5$wOrs"));
assert_eq!(&pass1.to_hex().unwrap()[..20], "0f521249b366dd6e0acc");
assert_eq!(format!("{}", pass1), "***SECURE***"); // display
assert_eq!(format!("{:?}", pass1), "***SECURE***"); // debug

let bytes = pass1.to_bytes(); // encode
let pass3 = Password::<Sha256, 6>::from_bytes(bytes).unwrap(); // decode
assert_eq!(pass1, pass3);

let hex_string = pass1.to_hex().unwrap(); // encode
let pass3 = Password::<Sha256, 6>::from_hex(hex_string).unwrap(); // decode
assert_eq!(pass1, pass3);

lib.rs 中有更多示例

依赖项

~1.5MB
~51K SLoC