1 个不稳定版本
0.4.0 | 2023 年 8 月 24 日 |
---|
#1397 在 算法
137 每月下载量
16KB
163 代码行
password-worker
提供密码哈希和验证工作者的模块。
此模块包含 PasswordWorker
结构体,它使用 rayon
线程池和 crossbeam-channel
的组合来高效地处理异步操作。它还使用了 tokio::sync::oneshot
通道,但不需要 tokio 运行时。
方法不会阻塞异步运行时。所有 await 操作都不会阻塞。它们使用非阻塞通道实现来发送和接收密码和哈希到 rayon 线程池。
PasswordWorker
是 Send + 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