5 个稳定版本
1.2.0 | 2021 年 6 月 20 日 |
---|---|
1.1.2 | 2021 年 6 月 20 日 |
1.0.0 | 2021 年 6 月 20 日 |
#666 在 数学
16KB
206 行
kctf-pow
一个库和 CLI 工具,用于使用 kCTF 方案解决、检查和生成工作量证明挑战。
安装
作为库使用时,将 kctf-pow
包添加到您的依赖项中。
CLI 可以使用 cargo install kctf-pow
安装,或者通过克隆仓库,使用 cargo build --release
构建,并手动复制可执行文件。
CLI 使用
解决挑战并将解决方案打印到标准输出
kctf-pow solve <challenge>
例如
kctf-pow solve s.AAAAMg==.NDtqORW1uZlIgzszbdMGZA==
# Outputs s.NUH3arymnKB+ysUGdv+67ypDamn4wOKCPORB2ivWE1Yhinam2v4S6q4nAoC5LP97LScdVoq+NuFVF++Win5mNRYZS6bJAs8fk0h8XgvfcC/7JfmFISqeCIo/CIUgIucVAM+eGDjqitRULGXqIOyviJoJjW8DMouMRuJM/3eg/z18kutQHkX0N3sqPeF7Nzkk8S3Bs6aiHUORM30syUKYug==
检查挑战的解决方案
kctf-pow check <challenge>
解决方案从 stdin 读取。如果解决方案正确,程序将退出状态码为 0 并输出 correct
。如果解决方案不正确,程序将退出状态码为 1 并输出 incorrect
。如果解决方案格式不正确,程序将退出状态码为 1 并将错误信息打印到标准错误。
例如
kctf-pow check s.AAAAMg==.NDtqORW1uZlIgzszbdMGZA==
# Input s.NUH3arymnKB+ysUGdv+67ypDamn4wOKCPORB2ivWE1Yhinam2v4S6q4nAoC5LP97LScdVoq+NuFVF++Win5mNRYZS6bJAs8fk0h8XgvfcC/7JfmFISqeCIo/CIUgIucVAM+eGDjqitRULGXqIOyviJoJjW8DMouMRuJM/3eg/z18kutQHkX0N3sqPeF7Nzkk8S3Bs6aiHUORM30syUKYug==
# Outputs correct and exits with status code 0
随机生成挑战
kctf-pow gen <difficulty>
例如
kctf-pow gen 50
# Outputs s.AAAAMg==.NDtqORW1uZlIgzszbdMGZA==
链式挑战生成和检查
kctf-pow ask <difficulty>
例如
kctf-pow ask 50
# Outputs s.AAAAMg==.NDtqORW1uZlIgzszbdMGZA==
# Input s.NUH3arymnKB+ysUGdv+67ypDamn4wOKCPORB2ivWE1Yhinam2v4S6q4nAoC5LP97LScdVoq+NuFVF++Win5mNRYZS6bJAs8fk0h8XgvfcC/7JfmFISqeCIo/CIUgIucVAM+eGDjqitRULGXqIOyviJoJjW8DMouMRuJM/3eg/z18kutQHkX0N3sqPeF7Nzkk8S3Bs6aiHUORM30syUKYug==
# Outputs correct and exits with status code 0
库使用
use kctf_pow::KctfPow;
fn main() {
let pow = KctfPow::new();
// decoding then solving a challenge
let chall = pow.decode_challenge("s.AAAAMg==.H+fPiuL32DPbfN97cpd0nA==").unwrap();
println!("{}", chall.solve());
// decoding then checking a challenge
let chall = pow.decode_challenge("s.AAAAMg==.NDtqORW1uZlIgzszbdMGZA==").unwrap();
let sol = "s.NUH3arymnKB+ysUGdv+67ypDamn4wOKCPORB2ivWE1Yhinam2v4S6q4nAoC5LP97LScdVoq+NuFVF++Win5mNRYZS6bJAs8fk0h8XgvfcC/7JfmFISqeCIo/CIUgIucVAM+eGDjqitRULGXqIOyviJoJjW8DMouMRuJM/3eg/z18kutQHkX0N3sqPeF7Nzkk8S3Bs6aiHUORM30syUKYug==";
assert_eq!(chall.check(sol), Ok(true));
assert_eq!(chall.check("s.asdf"), Ok(false));
// generating a random challenge of difficulty 50
let chall = pow.generate_challenge(50);
println!("{}", chall);
}
库文档
库的文档可在 docs.rs 上找到。
依赖项
~3MB
~56K SLoC