#password #hash #web

无std bcrypt

使用bcrypt轻松哈希和验证密码

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

Download history 31256/week @ 2024-04-12 31571/week @ 2024-04-19 35928/week @ 2024-04-26 32255/week @ 2024-05-03 34116/week @ 2024-05-10 38517/week @ 2024-05-17 37300/week @ 2024-05-24 33069/week @ 2024-05-31 38721/week @ 2024-06-07 34086/week @ 2024-06-14 32141/week @ 2024-06-21 32767/week @ 2024-06-28 30947/week @ 2024-07-05 28930/week @ 2024-07-12 34199/week @ 2024-07-19 27190/week @ 2024-07-26

124,816 每月下载量
用于 199 个crate (110 直接使用)

MIT 许可证

28KB
518

bcrypt

Safety Dance Build Status Documentation

安装

将以下内容添加到Cargo.toml

bcrypt = "0.15"

最低Rust版本为1.60.0。

用法

该crate公开了3个东西: 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。

无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