3 个版本

0.1.3 2021 年 11 月 7 日
0.1.1 2019 年 4 月 11 日
0.1.0 2019 年 3 月 29 日

#2570 in 命令行实用工具

MPL-2.0 许可证

31KB
222 代码行

tropy - 命令行熵查看器

Latest Version Documentation License BuildStatus dependency status

什么是 tropy 以及你将用它做什么?

tropy 命令行工具从字节或标准输入读取数据,并计算香农熵,然后在终端中用彩色编码显示。你是否曾经想过某个文件(例如应用程序的二进制文件或固件 blob)是否包含 加密压缩 数据?信息论熵是这两种情况的良好指标,因为压缩和加密都旨在在整个符号(字节值)状态范围内均匀分布符号(字节)的概率。

一个好的压缩算法将努力通过多种方式将输入中的常见位/字节模式转换为(位上)更短的表达形式。理想情况下,输出在所有可能的字节(符号)状态中均匀分布,因为单个状态的占主导地位将是另一种可进一步压缩的常见模式的指标。

另一方面,加密的目标是伪随机化输入,这也会通过(例如)防止输入模式泄露到输出中来增加熵。

使用 tropy,可以很容易地识别出高熵的部分,它们是红色区域(即熵接近 8bit/byte 的数据块)。

安装

安装Rust后运行

cargo install tropy

使用 tropy 命令行工具

# for example to get the entropy of the tropy binary
# in chunks of 1024 bytes (the default value)
tropy target/release/tropy --bytes 1024

将产生类似以下内容:example.png

# or read data from stdin and get the raw entropy as csv
# this should be pretty close to 8bit/byte
cat /dev/urandom | tropy - --csv

将 tropy 用作库

将其添加到您的 Cargo.toml

#[dependencies]
.
tropy = { version = "0.1.0", default_features = false }
.

要使用程序/库中的熵计算器,请添加以下内容

use std::io::Write;
use tropy::Calculator;

let mut calc = Calculator::new();

// write some bytes
calc.write(&[0u8]).unwrap();
calc.write(&[1u8]).unwrap();

// calculate the entropy over the accumulated state
// and reset the calculator
let e = calc.entropy();
assert_eq!(e,1.0);

许可证

Mozilla 公共许可证 2.0

依赖项

~3MB
~51K SLoC