8 个不稳定版本 (3 个破坏性版本)
0.4.1 | 2023 年 8 月 24 日 |
---|---|
0.4.0 | 2023 年 8 月 22 日 |
0.3.3 | 2023 年 4 月 9 日 |
0.2.0 | 2023 年 4 月 8 日 |
0.1.0 | 2023 年 4 月 5 日 |
#20 in #shared-state
每月 29 次下载
16KB
163 行
已弃用:将 crate 名称更改为 password-worker
Crates IO: https://crates.io/crates/password-worker
GitHub: https://github.com/junderw/password-worker
axum-password-worker
提供密码哈希和验证工作者的模块。
此模块包含 PasswordWorker
结构体,它使用 rayon
线程池和 crossbeam-channel
的组合来高效处理这些操作异步。它还使用 tokio::sync::oneshot
通道,但不需要 tokio 运行时。
这些方法不会阻塞异步运行时。所有 await 操作都不会阻塞。它们使用非阻塞通道实现来向 rayon 线程池发送和接收密码和哈希。
PasswordWorker
是 Send + Sync + Clone
,并且不包含生命周期。Clone 实现是浅拷贝,指向同一个线程池。它可以作为共享状态使用,无需 Arc。所有方法都采用 &self
,因此也不需要 Mutex。
添加为依赖项
cargo add axum-password-worker
## OR if you want to also add argon2 support
cargo add axum-password-worker -F rust-argon2
示例
use axum_password_worker::{BcryptConfig, PasswordWorker};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let password = "hunter2";
let cost = 12; // bcrypt cost value
let max_threads = 4; // rayon thread pool max threads
let password_worker = PasswordWorker::new_bcrypt(max_threads)?;
let hashed_password = password_worker.hash(password, BcryptConfig { cost }).await?;
println!("Hashed password: {:?}", hashed_password);
let is_valid = password_worker.verify(password, hashed_password).await?;
println!("Verification result: {:?}", is_valid);
Ok(())
}
可用的功能标志
库中包含一些实现。每个都绑定到可选依赖功能。
bcrypt
- (默认) (依赖项),导出 Bcrypt 和 BcryptConfig 类型。rust-argon2
- (依赖项),导出 Argon2id 和 Argon2idConfig 类型。
依赖项
~4.5–6MB
~111K SLoC