31次发布
0.15.1 | 2024年3月15日 |
---|---|
0.15.0 | 2023年7月5日 |
0.14.0 | 2023年2月3日 |
0.13.0 | 2022年5月3日 |
0.1.0 | 2015年12月24日 |
#8 in #password
124,816 每月下载量
用于 199 个crate (110 直接使用)
28KB
518 行
bcrypt
安装
将以下内容添加到Cargo.toml
bcrypt = "0.15"
最低Rust版本为1.60.0。
用法
该crate公开了3个东西: DEFAULT_COST
,hash
,verify
。
extern crate bcrypt;
use bcrypt::{DEFAULT_COST, hash, verify};
let hashed = hash("hunter2", DEFAULT_COST)?;
let valid = verify("hunter2", &hashed)?;
成本需要是一个介于4和31之间的整数(参见基准测试以了解每个的成本/速度),DEFAULT_COST
为12。
无std
bcrypt
crate支持no_std
平台。当启用alloc
功能时,所有crate功能都可用。当alloc
未启用时,只能使用原始的bcrypt()
函数。
基准测试
速度取决于使用的成本:越高越慢。以下是在2019年Macbook Pro上的一些基准测试,以提供一些成本/速度比率的想法。注意,我没有超过14,因为它太慢了。
test bench_cost_10 ... bench: 51,474,665 ns/iter (+/- 16,006,581)
test bench_cost_14 ... bench: 839,109,086 ns/iter (+/- 274,507,463)
test bench_cost_4 ... bench: 795,814 ns/iter (+/- 42,838)
test bench_cost_default ... bench: 195,344,338 ns/iter (+/- 8,329,675)
致谢
此gist用于哈希分割和空终止。
推荐
虽然bcrypt作为算法效果良好,但建议对于新项目使用类似Argon2的东西。
变更日志
- 0.15.1:更新base64依赖项
- 0.15.0:添加一个可禁用的
alloc
功能。 - 0.14.0:使用
subtle
crate进行恒等比较,更新base64并升级到2021版 - 0.13.0:使zeroize dep可选并使用固定盐长度
- 0.12.1:在返回哈希之前,在哈希函数中清除包含密码的零vec
- 0.12.0:允许密码中存在空字节
- 0.11.0:更新依赖项导致MSRV大幅增加
- 0.10.1:修复无效哈希导致的panic并允许
2x
- 0.10.0:将blowfish更新到0.8并将最低Rust版本更新到1.43.0。
- 0.9.0:更新base64到0.13和getrandom到0.2
- 0.8.2:修复无std构建
- 0.8.0:对哈希进行恒等验证,从仓库中删除自定义base64代码并添加
std
功能 - 0.7.0:添加HashParts::from_str并删除Error::description impl,它已弃用
- 0.6.3:添加
hash_with_salt
函数并使Version::format_for_version
公开 - 0.6.2:更新base64到0.12
- 0.6.1:更新base64到0.11
- 0.6.0:允许用户选择bcrypt版本,默认为2b而不是2y
- 0.5.0:公开内部
bcrypt
函数 + 2018版 - 0.4.0: 将DEFAULT_COST改为const类型,而不是static
- 0.3.0: 禁止密码中使用NULL字节并更新依赖项
- 0.2.2: 更新rand
- 0.2.1: 更新rand
- 0.2.0: 将rust-crypto替换为blowfish,使用一些更现代的Rust特性如
?
并处理更多错误 - 0.1.6: 更新rand和base64依赖项
- 0.1.5: 更新lazy-static到1.0
- 0.1.4: 将rustc-serialize依赖项替换为bcrypt
- 0.1.3: 修复密码长度超过72个字符时的panic问题
- 0.1.1: 使BcryptResult和BcryptError公开并更新依赖项
- 0.1.0: 首次发布
依赖项
~0.7–1.2MB
~22K SLoC