#key-hash #fingerprint #visialization #key-visialization

bishop

使用 OpenSSH 的 Drunken Bishop 算法可视化密钥和散列的库

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 可视化

Download history 14/week @ 2024-03-30 4/week @ 2024-04-06

每月 69 次下载
用于 bishop-cli

Apache-2.0/MIT

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 cargo docs
bishop-cli (源代码) 命令行应用 cargo

安装

Rust 库 位于 crates.io

CLI 应用

平台
Arch Linux aur
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许可证定义提交的任何有意包含在作品中的贡献,都将按照上述方式双许可,没有任何附加条款或条件。

依赖项

~0.6–1.1MB
~19K SLoC