没有项目描述
spamsp的Python项目详细描述
纯Python实现的spamsum(也称为ssdeep)具有改进和扩展
导言
传统的哈希和校验和工具,如 sha256和 CRC32 擅长掌握exact文件内容。 它们在任何字节甚至比特改变后都会导致非常不同的散列。 Spamsum 由Andrew Tridgell开发,用于比较相似的文件。 在文件散列的几个部分中进行了几次更改之后,这些更改只会稍微更改一点。 Spamsum分为两部分:一个“模糊”散列,为相似的文件生成相似的输出, 以及一个稍微采用的编辑距离实现来估计散列的相似程度 他们的档案是。
spamsum哈希长度由64个字符绑定。块大小选择为 文件大小。每个块都散列为一个字符。文件分块取决于 文件内容,以便平均块大小与 目标这允许使用相同的一个字符散列获得相同的块,即使文件的其他部分不同
- 由于块大小的原因,可比较文件的大小应该是彼此的两倍
- 出于同样的原因,您可以not使用spamsum在文件中搜索一些大的块外观
- 所有64个块都可能出现在开头,spamsum散列可能只“覆盖”文件的第一部分
- 在使用之前您应该考虑文件格式;在散列之前要解压缩zip存档文件
- 这个散列是not安全的,并且not保证了相似性;应该很容易生成 具有特定哈希值的文件
Spamspy
在这个项目中,spamsum组件hash和edit distance都是用纯Python实现的也 我们做了一些改进。spamsum散列长度限制被删除,因此块长度和 最大散列长度是可配置的,并且可以依赖于文件大小。
介绍了另一种基于ngrams的图书馆检索系统。有一个很大的文件库和一个 新文件我们要检查新文件中的任何大部分是否出现在库中。所有的文件 使用具有某些恒定块大小的spamsum进行哈希运算。然后散列被拆分为ngram图书馆保存 从ngram到其原始文件的映射在库中搜索遍历新文件哈希的所有ngram 并生成具有大多数匹配项的库文件。假设块大小为10kB,ngram大小为5,单个 match意味着文件本身可能有50kb的匹配。
用法
该包仅依赖于标准模块安装时使用:
pip install spamspy
代码:
fromspamspy.spamsumimportspamsums1='some long text'# or open('first.txt').read()hash1=spamsum(s1)hash2=spamsum('somewhat long telegram')fromspamsum.edit_distimportedit_disted=edit_dist(hash1,hash2)# large number means more difference
在shell中:
spamsum first.txt # 3:uqHRXLAHBn:K2 edit_dist uqHRXLAHBn uqHRXLAHc # 2 - two changes from first hash to the second ngram_spy update first.txt # hashes and saves ngrams in ./registry.dat ngram_spy search second.txt # (first.txt, 23) - matches on 23 ngrams ngram_spy search other.txt # (None, 0) - no matches found
性能
在python 2.7中,spamsum的运行速度大约是本机实现的600倍。 好消息是,在pypy 5.1.1中,它只比本机速度慢15倍,而本机速度应该是 在许多应用中可以容忍这将是扩展的价格,新的ngram 算法和方便在python世界。如果必须要燃烧速度,那么 新代码应该被移植回来。
许可证
版权所有(c)2017 Ilia Barahovsky
这个项目是在麻省理工学院的许可下发布的
这个spamsum算法和工具是由andrew tridgell作为 两个文件的有效相似性比较与垃圾邮件过滤器 客户。它是根据GNU通用公共许可版本2或 Perl艺术许可的条款。它是在没有修改的情况下从 https://www.samba.org/ftp/unpacked/junkcode/spamsum/到original/的 python端口的验证。