没有项目描述

spamsp的Python项目详细描述


Build status

纯Python实现的spamsum(也称为ssdeep)具有改进和扩展

导言

传统的哈希和校验和工具,如 sha256CRC32 擅长掌握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端口的验证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript问题:通过URL用网站数据填充Textview   java TabLayout Android,如何用几个标签填充整个屏幕宽度,并用大量标签滚动?   Eclipse Java运行的文件不再存在于我的工作区中   安装两个Java版本时,使用Java的windows链接不起作用   java将多个图形添加到单个JPanel   java Kafka ConsumerFactory,带有两个Desiarizer   使用反射更改java类超类   当一致性测试失败时,java有没有办法让堆栈跟踪显示在控制台中   java映射到基元类型的HashMap的快速替代方案是什么?   java关闭一个jframe所有剩余的打开jframe都将关闭。   java为什么不推荐“使用getString()获取设备标识符”?   java值比较和值赋值之间有什么性能差异吗?   Java实体数组到JavaScript数组   java使用流将一个列表转换为另一个列表   在JTree中保存对象,但更改显示的名称(java swing)?   java“Hello world”Android应用程序,文件尽可能少,没有IDE,只有文本编辑器   java在方法之间传递值   java如何为项目数组创建ParseQuery?