Javascript FNV-1a Hash Algorithm (up to 1024 bit) implementation. Based on:
89
stars
30
commits
JavaScript
primary language
Jan 2, 2024
updated
Javascript FNV-1a Hashing Algorithm up to 1024 bits, with highly optimized 32bit and 52bit implementations.
The FNV-1a hash algorithm, often simply called "fnv", disperses hashes throughout the n-bit hash space with very good dispersion and is very fast.
Use this module to generate unique hash/checksum values for Javascript strings or objects. Note: The FNV-1a algorithm is not even remotely suitable as a cryptographic pseudo-random generator, and should not be used to secure any thing for any reason. It is designed for uniqueness, not randomness.
fnv-plus is well-tested. Many other fnv implementations offer no unit tests to prove they work and are performant.fnv-plus implements a 52bit version of FNV-1a which provides a larger hash space while still making use of Javascript's 53-bit integer space.hash() function can now take arbitrary Javascript objects as input.$ npm install fnv-plus --save
var fnv = require('fnv-plus'),
astring = 'hello world',
ahash52 = fnv.hash(astring), // 52-bit hash by default
ahash64 = fnv.hash(astring, 64); // 64-bit hash specified
console.log(ahash52.hex() == 'a65e7023cd59e'); //true
console.log(ahash52.str() == 'stglysbf6m'); //true
console.log(ahash52.dec() == '2926792616498590'); //true
console.log(ahash64.hex() == '779a65e7023cd2e7'); //true
console.log(ahash64.str() == '1th7cxzlyc0dj'); //true
console.log(ahash64.dec() == '8618312879776256743'); //true
// fast variants
console.log(fnv.fast1a32hex(astring) == 'd58b3fa7'); //true
console.log(fnv.fast1a52hex(astring) == 'a65e7023cd59e'); //true
fnv.seed('foobar testseed');
console.log(fnv.hash(astring, 64).hex() == ahash64.hex()); // false
// ^^ because the default seed is not 'foobar testseed'
fnv.hash(string, bitlength)FnvHash objectfnv.seed(string)chongo <Landon Curt Noll> /\>./\\fnv.useUTF8(bool)falseFnvHash.str()Returns the hashed value as an ascii string
FnvHash.hex()Returns the hashed value as a hexadecimal string
FnvHash.dec()Returns the hashed value as a decimal string
This functions runs faster because they have no lib-overhead (see
benchmarks for more info). They always compute 1a
version of hashes and always use default seed. Directly returns hash values
(not FnvHash object).
fnv.fast1a32(string)fnv.fast1a32hex(string)fnv.fast1a52(string)fnv.fast1a52hex(string)fnv.fast1a64(string)fnv.fast1a32utf(string)fnv.fast1a32hexutf(string)fnv.fast1a52utf(string)fnv.fast1a52hexutf(string)fnv.fast1a64utf(string)MIT
17 commits
13 commits
JavaScript
100.0%
Javascript FNV-1a Hash Algorithm (up to 1024 bit) implementation. Based on:
89
stars
30
commits
JavaScript
primary language
Jan 2, 2024
updated
Javascript FNV-1a Hashing Algorithm up to 1024 bits, with highly optimized 32bit and 52bit implementations.
The FNV-1a hash algorithm, often simply called "fnv", disperses hashes throughout the n-bit hash space with very good dispersion and is very fast.
Use this module to generate unique hash/checksum values for Javascript strings or objects. Note: The FNV-1a algorithm is not even remotely suitable as a cryptographic pseudo-random generator, and should not be used to secure any thing for any reason. It is designed for uniqueness, not randomness.
fnv-plus is well-tested. Many other fnv implementations offer no unit tests to prove they work and are performant.fnv-plus implements a 52bit version of FNV-1a which provides a larger hash space while still making use of Javascript's 53-bit integer space.hash() function can now take arbitrary Javascript objects as input.$ npm install fnv-plus --save
var fnv = require('fnv-plus'),
astring = 'hello world',
ahash52 = fnv.hash(astring), // 52-bit hash by default
ahash64 = fnv.hash(astring, 64); // 64-bit hash specified
console.log(ahash52.hex() == 'a65e7023cd59e'); //true
console.log(ahash52.str() == 'stglysbf6m'); //true
console.log(ahash52.dec() == '2926792616498590'); //true
console.log(ahash64.hex() == '779a65e7023cd2e7'); //true
console.log(ahash64.str() == '1th7cxzlyc0dj'); //true
console.log(ahash64.dec() == '8618312879776256743'); //true
// fast variants
console.log(fnv.fast1a32hex(astring) == 'd58b3fa7'); //true
console.log(fnv.fast1a52hex(astring) == 'a65e7023cd59e'); //true
fnv.seed('foobar testseed');
console.log(fnv.hash(astring, 64).hex() == ahash64.hex()); // false
// ^^ because the default seed is not 'foobar testseed'
fnv.hash(string, bitlength)FnvHash objectfnv.seed(string)chongo <Landon Curt Noll> /\>./\\fnv.useUTF8(bool)falseFnvHash.str()Returns the hashed value as an ascii string
FnvHash.hex()Returns the hashed value as a hexadecimal string
FnvHash.dec()Returns the hashed value as a decimal string
This functions runs faster because they have no lib-overhead (see
benchmarks for more info). They always compute 1a
version of hashes and always use default seed. Directly returns hash values
(not FnvHash object).
fnv.fast1a32(string)fnv.fast1a32hex(string)fnv.fast1a52(string)fnv.fast1a52hex(string)fnv.fast1a64(string)fnv.fast1a32utf(string)fnv.fast1a32hexutf(string)fnv.fast1a52utf(string)fnv.fast1a52hexutf(string)fnv.fast1a64utf(string)MIT
17 commits
13 commits
JavaScript
100.0%