大文件的快速散列

imohash的Python项目详细描述


imohash是一个快速、恒定时间的哈希库。它使用文件 大小和采样以快速计算哈希值,而不考虑文件大小。 它最初是作为Go library发布的。

imosum是从命令行散列文件的示例应用程序,类似于 MD5总和。

安装

pip install imohash

用法

作为库:

fromimohashimporthashfilehashfile('foo.txt')'O\x9b\xbd\xd3[\x86\x9dE\x0e3LI\x83\r~\xa3'hashfile('foo.txt',hexdigest=True)'a608658926d8aa86b3db8208ad279bfe'# just hash the whole file if smaller then 200000 bytes. Default is 128Khashfile('foo.txt',sample_threshhold=200000)'x86\x9dE\x0e3LI\x83\r~\xa3O\x9b\xbd\xd3[E'# use samples of 1000 bytes. Default is 16Khashfile('foo.txt',sample_size=1000)'E\x0e3LI\x83\r~\xa3O\x9b\xbd\xd3[E\x23\x25'# hash an already opened filef=open('foo.txt')hashfileobject(f)'O\x9b\xbd\xd3[\x86\x9dE\x0e3LI\x83\r~\xa3'# hash a file on a remote serverimportparamikossh=paramiko.SSHClient()ssh.connect('host',username='username',password='verysecurepassword')ftp=ssh.open_sftp()hashfileobject(ftp.file('/path/to/remote/file/foo.txt'))'O\x9b\xbd\xd3[\x86\x9dE\x0e3LI\x83\r~\xa3'

或从命令行:

imosum *.jpg

使用

因为imohash只读取文件数据的一小部分,所以它非常 快速且非常适合文件同步和重复数据消除, 尤其是在一个相当慢的网络上。需要管理媒体(照片 和视频)在NAS和多台家庭计算机之间通过Wi-Fi 图书馆诞生了。

如果你只需要检查两个文件是否相同 采样的局限性(见下文),imohash可能是一个很好的 合身。

误用

因为imohash只读取文件数据的一小部分,所以它不是 适用于:

  • 文件验证或完整性监视
  • 操作固定大小文件的情况
  • 任何加密

设计

(注意:在algorithm description中提供了更精确的描述。)

imohash的工作原理是从一开始就对小块数据进行哈希处理, 文件的中间和结尾。它还将文件大小合并到 最后的128位哈希。这种方法基于一些假设 将因应用程序而异。首先,仅文件大小往往是 很好的区分,特别是随着文件大小的增加。什么时候 人们处理文件(如编辑照片),大小往往 改变。所以大小直接用于散列,并且任何具有 不同的大小将有不同的散列

大小是一个有效的区分因素,但还不够。它可以显示 这两个文件不一样,但为了增加信心 就像大小文件一样,一些段使用 murmur3,一个快速的 有效的哈希算法。默认情况下,从一开始就有16K块, 使用文件的中间和结尾。文件的结尾通常包含 在不影响文件大小的情况下更容易更改的元数据。 中间是很好的尺度。样本大小可以根据您的 申请。

1在要检查的文件样本上尝试du -a . | sort -nr | less。 这个断言。

小文件豁免

小文件比大文件更容易在大小上发生冲突。他们是 也可能更可能以微妙的方式改变抽样将 未命中(例如编辑大文本文件)。因此,伊莫哈什将 如果小于128K,只需散列整个文件。 也可配置。

性能

标准哈希性能指标对于imohash来说没有意义,因为 它只读取有限的一组数据。也就是说,现实世界 性能非常好。如果使用大文件和/或 慢网络,期待巨大的加速。(spoiler:读取48K更快 比读取500MB。)

名称

灵感来自ILS marker beacons

学分

  • “斯巴塞指纹”用于 TMSU给了我一些信心 这种散列方法。
  • Sébastien Paolacci的 murmur3库完成所有操作 在围棋版本中的重量级提升。
  • 哈吉姆·塞努玛也是 mmh3python版本的库。

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

推荐PyPI第三方库


热门话题
Java解析获取jquery发送的参数   双精度数组中的java过滤器元素   Java执行Shell命令不工作   将java client升级到2.2.2后创建hbase表实例时出错   java如何从Mule 4中的文件中读取JSON字符串   Java方法返回对象还是直接操作它?   java在EditText中键入内容   java并行迭代for循环中的所有机器,并检查它们是启动还是关闭?   java JAXRS客户端:ResponseProcessingException处理   java循环单链表删除方法   使用socket编程将数据从Java发送到C   java InputStream找不到文件   Java:在二进制文件中查找字符