7 个版本
0.3.4 | 2020 年 2 月 11 日 |
---|---|
0.3.3 | 2019 年 11 月 25 日 |
0.3.1 | 2019 年 10 月 27 日 |
0.2.0 | 2019 年 9 月 26 日 |
0.1.1 | 2019 年 9 月 8 日 |
#126 in 可视化
每月 69 次下载
用于 bishop-cli
26KB
409 行
bishop.rs
+----[drunken]----+ |..+.. oo+o. | | *.* o +.o. | |= = o * .E+ | |+. ..+ = +.. | |o ...+ S.o | | .o .....= . | |.. o .+ + | |. = + | | ..= | +----[bishop]-----+ |
使用 Rust 中实现的 Drunken Bishop 算法进行数据可视化的库和 CLI 应用
Drunken Bishop 是 OpenSSH 的
ssh-keygen
中用于可视化生成密钥的算法
目录
组件
组件 | 描述 | 版本 |
---|---|---|
bishop | 库 | |
bishop-cli (源代码) | 命令行应用 |
安装
Rust 库 位于 crates.io
CLI 应用
平台 | 包 |
---|---|
Arch Linux | |
Linux 预编译版本 | Github 版本 |
示例
作为命令行应用使用
some_data=$(printf foobar | sha256sum | cut -d' ' -f1)
# we are using cut here to crop the filename from sha256sum output
printf $some_data | bishop -sI hex
# `-s` tells bishop to take data from stdin
#
# `-I hex` tells bishop that input data will be in HEX format.
# As an alternative, you might use xxd to turn hex data into binary:
printf $some_data | xxd -r -p | bishop -s
# `-I bin` is implied by default
bishop -i <(printf $some_data) -I hex
# `-i` tells bishop to take data from specified file.
# We are using bash command substitution here, but
# any valid path is allowed, like `bishop -i ~/some.file`
bishop $some_data
# Without `-i` or `-s` bishop expects HEX encoded input in the first argument.
# Note that `-I` is not supported if data is provided as argument
printf foobar | bishop -sI hash
# `-I hash` tells bishop to hash all of its input
# using sha256 before making a randomart.
# Since maximum effective size of input data for random art with default size (17x9)
# is somwhere around 64-128 bytes, this option is extremely useful for large inputs
所有这些 bishop 调用都会将此艺术打印到控制台
Fingerprint of:
c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
+-----------------+
| . . |
| . + . + |
|o + + + = . |
| * + + O = |
| E o.o S |
| . +.=.o.= |
| o.B.=... |
| +.+.* o |
| o.o.o. . |
+-----------------+
请注意,如果提供数据作为参数或使用 -I hash
选项,则将回显输入。可以使用 -q
选项禁用此行为。
您可以在此处阅读 CLI 应用的完整用法(也可通过 --help
选项获取)
字符列表说明
您可以使用 -c
选项提供自定义的字符列表。这是一个用于指纹的字符向量(表示为字符串)。
每个字符被处理为
索引 | 描述 | 默认 |
---|---|---|
0 |
字段背景 | |
1..n |
用于绘制的字符 | .o+=*BOX@%&#/^ |
n+1 |
起始位置的字符 | S |
n+2 |
结束位置的字符 | E |
每个非背景字符表示 bishop 在此位置出现的次数。
起始和结束字符覆盖实际值。
字符列表必须至少有 4 个字符长,但安全字符列表至少有 18 个字符长,并且仅由清晰可辨别的符号组成。
作为库使用
Cargo.toml
bishop = "0.2.0"
使用标签上声明的最新版本 上面
对于 AsRef<u8>
(切片、向量)
extern crate bishop;
use bishop::*;
fn main() {
let data1 = [0u8; 16];
let data2 = vec![0u8; 16];
let mut art = BishopArt::new();
art.input(&data1);
art.input(&data2);
println!("{}", art.draw());
// Using chaining:
let drawn_art: String = BishopArt::new()
.chain(&data1)
.chain(&data2)
.draw();
println!("{}", drawn_art);
}
绘制选项和结果重用
use bishop::*;
fn random_art(data: &[u8]) {
let opts1 = DrawingOptions { top_text: "pass 1".to_string(), ..Default::default() };
let opts2 = DrawingOptions { bottom_text: "pass 2".to_string(), ..Default::default() };
// compute field once
let field = BishopArt::new().chain(data).result();
// then draw it multiple times with different options
println!("{}", field.draw_with_opts(&opts1));
println!("{}", field.draw_with_opts(&opts2));
}
对于 Read
(文件、stdin 等)
use bishop::*;
use std::io::{self, Read};
fn main() {
// BishopArt implements Write trait
let mut art = BishopArt::new();
io::copy(&mut io::stdin(), &mut art);
println!("{}", art.draw());
}
完整的API文档可在 docs.rs 上找到
许可
许可证为以下之一
- Apache许可证2.0版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示,否则您按照Apache-2.0许可证定义提交的任何有意包含在作品中的贡献,都将按照上述方式双许可,没有任何附加条款或条件。
依赖项
~0.6–1.1MB
~19K SLoC