3 个不稳定版本
0.2.0 | 2021年5月28日 |
---|---|
0.1.1 | 2021年2月4日 |
0.1.0 | 2021年2月4日 |
#16 in #force
用于 fuzzytags
17KB
386 代码行
brute-force: Rust 中用于任意计算的暴力破解库
这是一个旨在处理重复任务的库,包括启动线程、检查计算是否完成、返回结果,甚至生成输入。适配器系统允许您以模块化方式组合不同的辅助工具,因为不是所有的暴力破解都像工作量证明那样简单。此库的常见假设是每个线程都将工作在一个状态上,以找到结果,一旦找到结果,计算就会结束。
简单示例
use brute_force::{brute_force, adaptors};
use blake2::{Blake2b, Digest};
#[test]
fn test_proof_of_work() {
let config = brute_force::Config::default();
let f = |nonce: &u64| {
let digest = Blake2b::digest(&nonce.to_le_bytes());
digest.as_slice()[..3] == [0; 3]
};
let nonce = brute_force(config, adaptors::output_input(adaptors::auto_advance(f)));
let digest = Blake2b::digest(&nonce.to_le_bytes());
assert!(digest.as_slice()[..3] == [0; 3])
}
在此,我们使用 auto_advance
适配器自动为我们生成随机数,并使用 output_input
适配器自动返回计算成功时使用的输入随机数(而不是手动指定输出)。
有关更多示例,请参阅 src/tests 目录。有关配置和适配器的文档,请参阅 文档。
配置
您可以使用环境变量 BRUTE_FORCE_THREADS
改变使用的线程数量。
在程序内部,通过 Config 结构体,您可以手动覆盖线程数或改变此库检查线程是否应该停止的频率。您还可以通过 brute_force_with_timeout
函数设置超时。
依赖
~0.4–1MB
~18K SLoC