#hash #bcrypt #salt #mcf #bmcf

rcrypt

一个基于bcrypt的紧凑型哈希/盐值库,具有更小的哈希值

6个版本 (3个破坏性更新)

0.4.0 2022年2月25日
0.4.0-alpha.12022年2月24日
0.3.0 2022年2月23日
0.2.0 2022年2月23日
0.1.1 2022年2月23日

#871 in 密码学

每月42次下载

Apache-2.0

20KB
268

rcrypt: 一个紧凑型哈希和盐值库

GitHub Workflow Status Crates.io docs.rs Crates.io

rcrypt,即“简化加密”,是一个基于bcrypt的紧凑型哈希和盐值库,生成的哈希值比bcrypt小33.3%(40字节对60字节)。

它最初是为了Skytable的认证系统存储的一部分而制作的,但后来被移动到一个独立的库,以便在更广泛的Rust社区中使用。rcrypt几乎可以完全替代bcrypt crate。以下是它的运作方式

用法

use rcrypt::DEFAULT_COST;
// your password
let mypass = String::from("pass123");
// hash
let hash = rcrypt::hash(&mypass, DEFAULT_COST).unwrap();
// verify
assert!(rcrypt::verify(&mypass, &hash).unwrap());

对于使用bcrypt crate的用户,用法保持不变,除了hash方法返回一个Vec<u8>而不是一个String之外,而对于verify方法,您需要传递一个&[u8]来表示哈希。

获取bcrypt哈希

如果您需要从rcrypt哈希中获取bcrypt哈希的String,您也可以这样做!以下是操作步骤

use rcrypt::DEFAULT_COST;
let rhash = rcrypt::hash("mypassword", DEFAULT_COST).unwrap();
// now let's get the bcrypt hash from the rcrypt hash
let bhash = rcrypt::bmcf::decode_into_mcf(&rhash).unwrap();

工作原理

通过rcrypt生成二进制哈希并合并哈希字段,根据BMCF规范,得到了更小的哈希大小。

  • MCF哈希字段中的字段分隔符在rcrypt生成的哈希中不存在
  • 成本和方案字段合并为一个字段
  • 由rcrypt生成的哈希不使用base64,这导致存储盐+摘要所需的字节数更少

致谢

许可证

此crate在Apache-2.0许可证下分发。

依赖项

~0.7–1MB
~19K SLoC