#thread-pool #password-hashing #shared-state #run-time #rayon #operations #block

已弃用 axum-password-worker

这是一个密码哈希包装器,可以用作共享状态,并使用 rayon 线程池,因此不会阻塞异步运行时

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 次下载

MIT 许可证

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 线程池发送和接收密码和哈希。

PasswordWorkerSend + 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