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

password-worker

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

1 个不稳定版本

0.4.0 2023 年 8 月 24 日

#1397算法

Download history 18/week @ 2024-07-03 116/week @ 2024-07-10 1/week @ 2024-07-17 2/week @ 2024-07-24

137 每月下载量

MIT 许可证

16KB
163 代码行

password-worker 最新版本

提供密码哈希和验证工作者的模块。

此模块包含 PasswordWorker 结构体,它使用 rayon 线程池和 crossbeam-channel 的组合来高效地处理异步操作。它还使用了 tokio::sync::oneshot 通道,但不需要 tokio 运行时。

方法不会阻塞异步运行时。所有 await 操作都不会阻塞。它们使用非阻塞通道实现来发送和接收密码和哈希到 rayon 线程池。

PasswordWorkerSend + Sync + Clone,且不包含生命周期。Clone 实现是一个浅拷贝,指向相同的线程池。它可以作为共享状态使用,而无需 Arc。所有方法都接受 &self,因此不需要 Mutex。

添加为依赖项

cargo add password-worker

## OR if you want to also add argon2 support

cargo add password-worker -F rust-argon2

示例

use 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