FashHashes is a suite of .NET non-cryptographic hash functions.
Status: | |
Info: | |
NuGet: | |
Donation: |
High Performing
: deeply-optimized code makes extensive use of method inlining and unsafe memory pointers in order to speed up the computations.Allocation Free
: all the internal functions follow a zero-allocation approach, only primitive types and/or arrays of primitive types are used by the algorithms.Endian-Agnostic
: all the hashes provide consistent results regardless of the machine byte order, while only moderately affecting the overall performance of the computations.Platform-Agnostic
: the code has been developed under.NET Standard
framework and bothx86
andx64
environments are fully supported.Fully Managed
: since version3.0.0
, pointers requiring unsafe memory access contexts have been completely removed and the library is now fully managed.
The library includes the following non-cryptographic hashes:
FarmHash
- 32/64/128 Bits Output
- Fingerprint Versions
- Reference Implementation: https://github.com/google/farmhash
FastHash
- 32/64 Bits Output
- Reference Implementation: https://github.com/ZilongTan/fast-hash
FastPositiveHash / TH1A
- 64 Bits Output
- 0/1/2 Variants
- Reference Implementation: https://github.com/leo-yuriev/t1ha
HalfSipHash
- 32 Bits Output
- Reference Implementation: https://github.com/veorq/SipHash
HighwayHash
- 64/128/256 Bits Output
- Reference Implementation: https://github.com/google/highwayhash
KomiHash
- 64 Bits Output
- Reference Implementation: https://github.com/avaneev/komihash
MetroHash
- 64/128 Bits Output
- 0/1 Variants
- Reference Implementation: https://github.com/jandrewrogers/MetroHash
MirHash
- 64 Bits Output
- Reference Implementation: https://github.com/vnmakarov/mir
MumHash
- 64 Bits Output
- Reference Implementation: https://github.com/vnmakarov/mum-hash
MurmurHash
- 32/64/128 Bits Output
- x86/x64 Variants
- Reference Implementation: https://github.com/aappleby/smhasher
Mx3Hash
- 64 Bits Output
- Reference Implementation: https://github.com/jonmaiga/mx3
PengyHash
- 64 Bits Output
- Strict Variant
- Reference Implementation: https://github.com/tinypeng/pengyhash
SipHash
- 64 Bits Output
- 1-3/2-4 Variants
- Reference Implementation: https://github.com/veorq/SipHash
SpookyHash
- 32/64/128 Bits Output
- Reference Implementation: http://burtleburtle.net/bob/hash/spooky.html
WyHash
- 32/64 Bits Output
- Strict Variant
- Reference Implementation: https://github.com/wangyi-fudan/wyhash
xxHash
- 32/64 Bits Output
- Reference Implementation: https://github.com/Cyan4973/xxHash
The following Frameworks
are supported:
- Library:
.NET Standard 2.0
,.NET Standard 2.1
- Auxiliary Projects:
.NET Core 2.1
,.NET Core 3.1
,.NET 5.0
,.NET 6.0
The following NuGet
packages are required for performing unit tests:
Hash Rank | Hash Name | Bulk Speed Test Average ↓ | Chunks Speed Test Average |
---|---|---|---|
- | DummyHash (Reference) | 609.34 GB/s | 2.06 GB/s |
1 | FarmHash64 | 11.47 GB/s | 626.60 MB/s |
2 | FarmHash128 | 11.27 GB/s | 641.03 MB/s |
3 | MetroHash128-V1 | 11.11 GB/s | 636.52 MB/s |
4 | MetroHash64-V1 | 11.10 GB/s | 628.81 MB/s |
5 | MetroHash128-V2 | 11.06 GB/s | 635.34 MB/s |
6 | MetroHash64-V2 | 11.05 GB/s | 620.92 MB/s |
7 | XxHash64 | 10.03 GB/s | 596.90 MB/s |
8 | Mx3Hash | 9.31 GB/s | 545.03 MB/s |
9 | PengyHash | 8.73 GB/s | 517.22 MB/s |
10 | MurmurHash128-x64 | 6.70 GB/s | 485.59 MB/s |
11 | MurmurHash64-x64 | 6.56 GB/s | 467.14 MB/s |
12 | XxHash32 | 6.43 GB/s | 482.92 MB/s |
13 | FastHash64 | 5.34 GB/s | 444.45 MB/s |
14 | FastHash32 | 5.26 GB/s | 440.91 MB/s |
15 | WyHash32 | 4.38 GB/s | 389.76 MB/s |
16 | FarmHash32 | 4.27 GB/s | 394.83 MB/s |
17 | FastPositiveHash-V1 | 4.10 GB/s | 386.51 MB/s |
18 | MurmurHash128-x86 | 4.05 GB/s | 383.60 MB/s |
19 | MurmurHash64-x86 | 4.01 GB/s | 374.73 MB/s |
20 | FastPositiveHash-V2 | 3.99 GB/s | 386.33 MB/s |
21 | MurmurHash32 | 2.82 GB/s | 332.35 MB/s |
22 | MumHash | 2.44 GB/s | 312.24 MB/s |
23 | WyHash64 | 2.39 GB/s | 340.13 MB/s |
24 | KomiHash | 2.31 GB/s | 331.88 MB/s |
25 | FastPositiveHash-V0 | 2.29 GB/s | 320.69 MB/s |
26 | MirHash | 2.03 GB/s | 298.14 MB/s |
27 | SipHash-13 | 1.28 GB/s | 230.67 MB/s |
28 | HighwayHash256 | 914.16 MB/s | 125.78 MB/s |
29 | HighwayHash64 | 899.65 MB/s | 151.54 MB/s |
30 | HighwayHash128 | 883.51 MB/s | 143.84 MB/s |
31 | SpookyHash32 | 752.43 MB/s | 156.79 MB/s |
32 | SpookyHash64 | 734.84 MB/s | 149.36 MB/s |
33 | SipHash-24 | 734.74 MB/s | 168.43 MB/s |
34 | SpookyHash128 | 723.91 MB/s | 155.67 MB/s |
35 | HalfSipHash | 364.78 MB/s | 119.96 MB/s |
The tests above have been conducted with the following machine setup:
CPU:
Intel Core i7-7700HQ @2.80GHz (4 Cores, 8 Threads, 256KB L1 Cache)RAM:
16 GB x DDR4 SO-DIMM @1200MHzOS:
Microsoft Windows 10 64-Bit