Giter Club home page Giter Club logo

spookyhash's Introduction

spookyhash

A Python wrapper of Bob Jenkins' SpookyHash version 2. Offers 32- 64- and 128-bit oneshot and incremental hashes.

License

Licensed under the MIT license. See the LICENSE file in the repository root for more details.

Usage

Installation

Available through spookyhash - PyPI using pip install spookyhash.

Oneshot Hashes

>>> import spookyhash

>>> spookyhash.hash32(b'hello world')
2617184861
>>> spookyhash.hash32(b'hello world', seed=0x12345678)
3380090220

>>> spookyhash.hash64(b'hello world')
14865987102431973981
>>> spookyhash.hash64(b'hello world', seed=123)
5719863273689036421

>>> spookyhash.hash128(b'hello world')
185933735475381961281710998418114941533
>>> spookyhash.hash128(b'hello world', seed1=123_000, seed2=456_000)
144121310386202441278894605216246194925

>>> # For a more comparable result to other libraries
>>> spookyhash.hash128_pair(b'hello world')
(14865987102431973981, 10079487997037711397)
>>> spookyhash.hash128_pair(b'hello world', seed1=123_000, seed2=456_000)
(12678109464562819821, 7812831891108919044)

Incremental Hashes

>>> import spookyhash

>>> sh = spookyhash.Hash32()
>>> sh.update(b'hello')
>>> sh.update(b' ')
>>> sh.update(b'world')
>>> sh.final()
2617184861
>>> sh.hexdigest()
'5d12ff9b'

>>> spookyhash.Hash64(b'hello ', seed=123).update(b'world').final()
5719863273689036421

>>> spookyhash.Hash64(b'hello ', seed=123).update(b'world').hexdigest()
'85b609a05709614f'

>>> sh = spookyhash.Hash128(seed1=123_000, seed2=456_000)
>>> sh.update(b'hello world')
>>> sh.final()
144121310386202441278894605216246194925
>>> sh.final_pair()
(12678109464562819821, 7812831891108919044)
>>> sh.hexdigest()
'ede2c8f262b1f1af04f763f735c16c6c'

memoryview Support

Includes memoryview compatible types, such as NumPy arrays.

>>> import spookyhash
>>> import numpy as np

>>> spookyhash.Hash64(np.arange(100)).hexdigest()
'43ab5363ad362c74'

>>> spookyhash.Hash64(memoryview(b'hello world')).hexdigest()
'5d12ff9b81984ece'

Platform Independence

If run on a big-endian system, the code would produce different hashes, but of equal quality.

spookyhash's People

Contributors

buhanec avatar bus-dt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

bus-dt synodriver

spookyhash's Issues

update() does not work on memoryview buffers

from hashlib import md5
from spookyhash import Hash128

md5hasher = md5()
md5hasher.update(memoryview(b'lorem ipsum'))
md5hasher.hexdigest()
'80a751fde577028640c419000e33eba6'

spkhasher = Hash128()
spkhasher.update(memoryview(b'lorem ipsum'))
Traceback (most recent call last):
File "", line 1, in
TypeError: Argument 'message' has incorrect type (expected bytes, got memoryview)

hexdigest() returns bytes instead of a string (like hashlib does)

This makes it more difficult to use spookyhash as a drop-in replacement for hashlib

from hashlib import md5
from spookyhash import Hash128

md5hasher = md5()
md5hasher.update(b'lorem ipsum')
md5hasher.hexdigest()
'80a751fde577028640c419000e33eba6'

spkhasher = Hash128()
spkhasher.update(b'lorem ipsum')
spkhasher.hexdigest()
b'4fb2db130bdd624c9773cf42bba91990'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.