#bcrypt #hash #password #web

no-std bcrypt-no-getrandom

使用 bcrypt 在无需 getrandom 或 zeroize 的情况下轻松散列和验证密码,提供近似完整的功能,无需 alloc 或 std

2 个不稳定版本

0.16.0 2024 年 8 月 5 日
0.15.1 2024 年 8 月 5 日

#682 in 密码学

Download history 232/week @ 2024-08-01 36/week @ 2024-08-08

每月 268 次下载

MIT 许可证

27KB
506

bcrypt

Safety Dance Build Status Documentation

安装

将以下内容添加到 Cargo.toml 中

bcrypt = "0.15"

Rust 的最低版本是 1.60.0。

用法

该软件包使以下三项公开: DEFAULT_COSThashverify

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