3 个不稳定版本

0.2.0 2021年5月28日
0.1.1 2021年2月4日
0.1.0 2021年2月4日

#16 in #force


用于 fuzzytags

MIT 许可证

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