Crates.io | bcrypt |
lib.rs | bcrypt |
version | 0.15.1 |
source | src |
created_at | 2015-12-24 22:40:27.531267 |
updated_at | 2024-03-15 17:35:42.956889 |
description | Easily hash and verify passwords using bcrypt |
homepage | https://github.com/Keats/rust-bcrypt |
repository | https://github.com/Keats/rust-bcrypt |
max_upload_size | |
id | 3747 |
size | 36,209 |
Add the following to Cargo.toml:
bcrypt = "0.15"
The minimum Rust version is 1.60.0.
The crate makes 3 things public: DEFAULT_COST
, hash
, verify
.
extern crate bcrypt;
use bcrypt::{DEFAULT_COST, hash, verify};
let hashed = hash("hunter2", DEFAULT_COST)?;
let valid = verify("hunter2", &hashed)?;
The cost needs to be an integer between 4 and 31 (see benchmarks to have an idea of the speed for each), the DEFAULT_COST
is 12.
no_std
bcrypt
crate supports no_std
platforms. When alloc
feature is enabled,
all crate functionality is available. When alloc
is not enabled only the
raw bcrypt()
function is usable.
Speed depends on the cost used: the highest the slowest. Here are some benchmarks on a 2019 Macbook Pro to give you some ideas on the cost/speed ratio. Note that I don't go above 14 as it takes too long.
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)
This gist for the hash splitting and the null termination.
While bcrypt works well as an algorithm, using something like Argon2 is recommended for new projects.
alloc
feature that can be disabled.subtle
crate for constant time comparison, update base64 and bump to 2021 edition2x
std
featurehash_with_salt
function and make Version::format_for_version
publicbcrypt
function + edition 2018?
and handle more errors