Skip to main content

fuzzyhashlib

Introduction

What if fuzzy hashing algorithms were usable through a common API, the same way that Python’s hashlib exposes secure hash and message digest algorithms? This is the question fuzzyhashlib attempts to answer by providing a hashlib-like interface to:

  • ssdeep (via a Python ctypes wrapper)

  • sdbf (via sdhash’s Python swig interface)

  • tlsh (via tlsh’s Python C interface)

Currently supported for Python 2.7 on 32- and 64-bit Ubuntu (Ubuntu 16.04).

Usage

Example usage in iPython is provided below.

In [1]: import fuzzyhashlib

In [2]: fuzzyhashlib.ssdeep("a" * 1024).hexdigest()
Out[2]: '3:tj1:n'

In [3]: fuzzyhashlib.sdhash("a" * 1024).hexdigest()
Out[3]: 'sdbf:03:0::1024:sha1:256:5:7ff:160:1:0:AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA==\n'

In [4]: # Comparison example, using subtraction operator.

In [5]: fuzzyhashlib.ssdeep("ab" * 2048) - fuzzyhashlib.ssdeep("ab" * 2048)
Out[5]: 100

In [6]: # Comparison example, using .compare() method.

In [7]: fuzzyhashlib.ssdeep("ab" * 2048).compare(fuzzyhashlib.ssdeep("ab" * 2048))
Out[7]: 100

Change Log

Version 0.0.9 - Change to correct license (GPL), last Python 2 version:

  • Change to correct license for distribution (GPL, using GPLv3+)

  • Final Python 2 version; future versions (if any) will be Python 3 exclusively

Version 0.0.8 - Improved documentation and class interfaces:

  • Improve documentation to include examples of how to do comparisons

  • Adds .compare() method to fuzzyhash objects

Version 0.0.7 - Add support for tlsh:

  • Adds support for tlsh

Version 0.0.6 - Documentation and error handling:

  • documentation adds description of behaviour if buf and hash paramters are provided at initialisation

  • sdhash class raises exception if provided buffer is < 512 bytes in size

Version 0.0.5 - Imporoved packaging:

  • (and the versions in-between) fix packaging so libs install correctly

Version 0.0.2 - 32-bit libraries for linux:

  • libraries installed for x86-32 linux too

Version 0.0.1 - Initial version:

  • ssdeep and sdhash wrapped with hashlib-like interfaces

  • libraries installed for x86-64 linux only

License and Source Availability

This library is licensed under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

The information in this section is also provided under fuzzyhashlib’s source tree under ‘NOTICE’.

ssdeep

ssdeep was written by Jesse Kornblum of the ManTech International Corporation, with acknowledged contributions by Jason Sherman and testing by the Computer Science Department at the University of Iowa. Compiled libraries built from unmodified ssdeep source, version 2.13, are installed as part of this package. The original source code for this version of ssdeep available from:

ssdeep is open source software and is licensed under GPLv2.

sdhash

sdhash was written by Vassil Roussev and Candice Quates. Compiled libraries built from unmodified sdhash source, version 3.4, are installed are installed as part of this package. The original source code for this version of sdhash is available from:

sdhash is open source software and is licensed under APLv2.

tlsh

tlsh was written by Jonathan Oliver, Chun Cheng, Yanggui Chen, Scott Forman and Jayson Pryde of Trend Micro. Compiled libraries built from unmodified tlsh source, version 3.9.1 (641cb4), are installed are installed as part of this package. The original source code for this version of tlsh is available from:

tlsh is open source software and is licensed under APLv2 and BSDv3.

Other Thanks

Thanks to Michael Dorman whose excellent ‘yara-ctypes’ provided logical layout for a Python ctypes-based project. Several concepts and functions here have been borrowed accordingly :-)

Release files for fuzzyhashlib 0.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fuzzyhashlib 0.0.9
File Size Uploaded
fuzzyhashlib-0.0.9.tar.gz 487.7 kB Details

Release files / fuzzyhashlib-0.0.9.tar.gz

Download URL fuzzyhashlib-0.0.9.tar.gz
Size 487.7 kB
Tags Source
SHA-256 checksum
How to use checksums
77f6f0c186fe997415282960ac8b1cdd1230c59bc1fea0126daac9c7fce7b487
BLAKE2b-256 checksum
How to use checksums
29c36173d243ccd56db45e0e13d83da8541569919cdfddfc5dd3e00f898035f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.5.2

Release history Release notifications | RSS feed

This release

0.0.9 This release

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page