2 个不稳定版本
0.16.0 | 2024 年 8 月 5 日 |
---|---|
0.15.1 | 2024 年 8 月 5 日 |
#682 in 密码学
每月 268 次下载
27KB
506 行
bcrypt
安装
将以下内容添加到 Cargo.toml 中
bcrypt = "0.15"
Rust 的最低版本是 1.60.0。
用法
该软件包使以下三项公开: 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。
no_std
bcrypt
软件包支持 no_std
平台。当启用 alloc
功能时,所有软件包功能都可用。当 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 的技术。
变更日志
-
分支更改:删除
getrandom
-
0.15.1:更新 base64 依赖项
-
0.15.0:添加可禁用的
alloc
功能。 -
0.14.0:使用
subtle
软件包进行恒等时间比较,更新 base64 并升级到 2021 版本 -
0.13.0:使 zeroize 依赖项可选,并使用固定的盐长度
-
0.12.1:在返回散列之前在散列函数中零化包含密码的 vec
-
0.12.0:允许密码中有空字节
-
0.11.0:更新依赖项导致 MSRV 大幅提升
-
0.10.1:修复与无效散列相关的恐慌,并允许
2x
-
0.10.0:将 blowfish 更新到 0.8,并将最低 Rust 版本更新到 1.43.0。
-
0.9.0:将 base64 更新到 0.13,并将 getrandom 更新到 0.2
-
0.8.2:修复 no-std 构建
-
0.8.0:对散列进行恒等时间验证,从仓库中删除自定义 base64 代码并添加
std
功能 -
0.7.0:添加 HashParts::from_str 并删除 Error::description 实现,因为它已弃用
-
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: 用 blowfish 替换 rust-crypto,使用更多现代 Rust 特性如
?
并处理更多错误 -
0.1.6: 更新 rand 和 base64 依赖项
-
0.1.5: 更新 lazy-static 到 1.0
-
0.1.4: 用 bcrypt 替换 rustc-serialize 依赖项
-
0.1.3: 修复密码长度超过 72 个字符时的 panic
-
0.1.1: 将 BcryptResult 和 BcryptError 设置为公开并更新依赖项
-
0.1.0: 首次发布
依赖项
~790KB
~16K SLoC