MurmurHash3 is a modern, fast, well regarded non-cryptographic hashing algorithm. Non-cryptographic means that while
hashes are very well distributed for arbitrary data, if an attacker tries to attack the algorithm they might be able
to find some sort of pattern. Non-cryptographic hashes trade security for speed; cryptographic hashes, like SHA-256,
There are multiple variants of MurmurHash3. This one is x86_128 (aka Murmur 3C), little endian.
I selected it when looking for hash/checksum algorithm meeting these criteria: (1) Can generate 64 bit hashes. 32
bits wasn't enough to ensure the odds of collision are virtually 0. (2) Is fast, as fast as possible. (3) Is fast
even on 32 bit architectures, as most mobile devices today have 32 bit processors.
The Murmur3 x86_128 algorithm met those criteria well. 32 bits output wasn't enough, so we use the 128 bit variant
and throw the top 64 bits away (though with the API below, you can get all 128 bits if you want). The x86 variant
uses all 32 bit arithmetic, so it runs quickly on 32 & 64 bit processors. x64 Murmur is somewhat faster on 64 bit
machines, but much slower on 32 bit, so it wasn't a good choice. Other modern hash algorithms generating > 32 bits
output (e.g. SpookyHash and CityHash) use 64 arithmetic, with no 32 bit variant available, so they weren't good
This Java code was implemented from the C reference implementation, here: