#locality #sensitive #hashing #hash-values #byte-string #byte-stream #input-stream

tlsh

Rust版本的趋势科技局部敏感哈希(TLSH)

1 个不稳定版本

0.1.0 2021年6月5日

1322算法 中排名

Download history 116/week @ 2024-03-13 137/week @ 2024-03-20 89/week @ 2024-03-27 117/week @ 2024-04-03 78/week @ 2024-04-10 86/week @ 2024-04-17 176/week @ 2024-04-24 160/week @ 2024-05-01 100/week @ 2024-05-08 162/week @ 2024-05-15 173/week @ 2024-05-22 78/week @ 2024-05-29 104/week @ 2024-06-05 58/week @ 2024-06-12 66/week @ 2024-06-19 57/week @ 2024-06-26

305 每月下载次数

BSD-3-Clause OR Apache-2.0

60KB
775

TLSH-RS

Crates.io Documentation Build

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

概述

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

  • 步骤1:使用长度为5的滑动窗口处理输入流,并填充哈希桶。每个三元组通过哈希函数传递(在本实现中,哈希函数是皮尔逊哈希)。
  • 步骤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 代码集成到其中的系统的许可证限制。

无运行时依赖项