6个版本 (3个破坏性更新)
0.4.0 | 2022年2月25日 |
---|---|
0.4.0-alpha.1 | 2022年2月24日 |
0.3.0 | 2022年2月23日 |
0.2.0 | 2022年2月23日 |
0.1.1 | 2022年2月23日 |
#871 in 密码学
每月42次下载
20KB
268 行
rcrypt
: 一个紧凑型哈希和盐值库
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,这导致存储盐+摘要所需的字节数更少
致谢
- Binary Modular Crypt Format规范 由 Andre DeMarre
- 原始Rust bcrypt实现 由 Vincent Prouillet。此crate中使用的底层bcrypt实现和公共API深受
bcrypt
crate的启发
许可证
此crate在Apache-2.0许可证下分发。
依赖项
~0.7–1MB
~19K SLoC