#哈希 #局部性 #敏感 #字节流 #tlsh #哈希值 #搜索算法

tlsh-fixed

Rust版的趋势科技局部敏感哈希

1 个不稳定版本

0.1.1 2023年2月24日

#2013算法

Download history 586/week @ 2024-03-13 1055/week @ 2024-03-20 365/week @ 2024-03-27 623/week @ 2024-04-03 230/week @ 2024-04-10 520/week @ 2024-04-17 1247/week @ 2024-04-24 520/week @ 2024-05-01 676/week @ 2024-05-08 899/week @ 2024-05-15 707/week @ 2024-05-22 757/week @ 2024-05-29 515/week @ 2024-06-05 413/week @ 2024-06-12 311/week @ 2024-06-19 731/week @ 2024-06-26

2,018 每月下载量
5 个crate(4 个直接使用)中使用

BSD-3-Clause OR Apache-2.0

60KB
797

TLSH-RS

Crates.io Documentation Build

这是趋势科技局部敏感哈希(TLSH)算法的Rust移植 [github][网站],用于计算字节流的哈希值。这些生成的哈希值可用于相似性检测、数据聚类或最近邻搜索。

概述

构建TLSH摘要的算法如下(更多细节,请参阅 [1]

  • 步骤 1:使用长度为5的滑动窗口处理输入流,并填充哈希桶。每个三元组通过哈希函数(在本实现中,哈希函数是Pearson哈希)。
  • 步骤 2:从步骤1中获得的哈希桶中计算四分位数点。这一步可能需要对桶数组进行排序:q1:数组的最低25% q2:数组的最低50% q3:数组的最低75%
  • 步骤 3:计算摘要头。哈希的前三个字节保留为头。TLSH哈希的头由三部分组成
    • 第一个字节是字节字符串的校验和(带有一些模运算)
    • 第二个字节是从字节字符串长度对数的模运算中计算出来的
    • 第三个字节是q1_ratio <<< 4 | q2_ratio的结果,其中q1_ratio = (q1 * 100 / q3) MOD 16 q2_ratio = (q2 * 100 / q3) MOD 16
  • 步骤 4:从桶数组构建摘要体。注意:在此步骤中,假设读取桶的顺序是倒序的。这意味着,首先读取最后一个元素,而最后一个元素最后读取。它们的值被转换为十六进制形式并附加到最终的哈希值中。

示例

示例 examples/tlsh_files.rs 展示了如何从文件中计算哈希值并测量它们的差异(距离)。要运行示例,请在命令行中使用以下命令

cargo run --release --example tlsh_files ../path/to/folder/with/files

参考

J. Oliver, C. Cheng 和 Y. Chen (2013)。 "TLSH - 一种局部敏感哈希" [pdf]

许可证

TLSH 以 Apache 或 BSD 许可证提供。用户可以选择使用任一许可证,具体取决于他们计划与 TLSH 代码集成的系统的许可证限制。

无运行时依赖