You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 7-8.RSVP
Socket
Socket
Sign inDemoInstall

fnv-plus

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fnv-plus

Javascript FNV-1a Hashing Algorithm up to 1024 bits, with highly optimized 32bit and 52bit implementations.


Version published
Weekly downloads
125K
increased by13.17%
Maintainers
1
Created
Weekly downloads
 

Package description

What is fnv-plus?

The fnv-plus npm package is a JavaScript implementation of the FNV (Fowler-Noll-Vo) hash function. It provides fast and efficient hashing capabilities, which are useful for various applications such as data integrity checks, hash tables, and more.

What are fnv-plus's main functionalities?

Hashing a String

This feature allows you to hash a string using the FNV hash function. The resulting hash can be used for data integrity checks or as a unique identifier.

const fnv = require('fnv-plus');
const hash = fnv.hash('example string');
console.log(hash.hex());

Hashing a Buffer

This feature allows you to hash a buffer, which is useful for binary data. The resulting hash can be used for various purposes, including data integrity and unique identification.

const fnv = require('fnv-plus');
const buffer = Buffer.from('example buffer');
const hash = fnv.hash(buffer);
console.log(hash.hex());

Hashing with Different Bit Lengths

This feature allows you to hash data with different bit lengths (32-bit or 64-bit). This can be useful depending on the specific requirements of your application.

const fnv = require('fnv-plus');
const hash32 = fnv.hash('example string', 32);
const hash64 = fnv.hash('example string', 64);
console.log(hash32.hex());
console.log(hash64.hex());

Other packages similar to fnv-plus

Readme

Source

fnv-plus

NPM version Build status

Javascript FNV-1a Hashing Algorithm up to 1024 bits, with highly optimized 32bit and 52bit implementations.

Concept

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.

Why fnv-plus?
  • It is the fastest FNV implementation available for Node.js (thanks desudesutalk). See Benchmarks.
  • It is the only npm module that is capable of generating fnv hashes for keyspaces larger than 32 bits.
  • 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.
New in 1.3.x
New in 1.2.x
  • You can easily define custom seeds.
  • the hash() function can now take arbitrary Javascript objects as input.
  • changed default bitlength to 52

Install

$ npm install fnv-plus --save

Usage

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'

API

fnv.hash(string, bitlength)
  • Hash a string using the given bit length (52 is default)
  • returns a FnvHash object
fnv.seed(string)
  • Seed the algorithm to produce different values. Hashing the same value with different seeds will very likely result in different results. To the extent your seed can be random, it can serve as a source of randomness, but nonetheless is not a replacement for a crypgographic PRG (pseudo-random generator).
  • default seed is chongo <Landon Curt Noll> /\>./\\
fnv.useUTF8(bool)
  • Controls UTF-8 awareness of hash functions
  • default is false
FnvHash.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

Fast variants

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)
  • Calculate FNV-1a 32bit hash
  • returns int
fnv.fast1a32hex(string)
  • Calculate FNV-1a 32bit hash
  • returns hex string
fnv.fast1a52(string)
  • Calculate FNV-1a 52bit hash
  • returns int
fnv.fast1a52hex(string)
  • Calculate FNV-1a 52bit hash
  • returns hex string
fnv.fast1a64(string)
  • Calculate FNV-1a 64bit hash
  • returns hex string
fnv.fast1a32utf(string)
  • Calculate FNV-1a 32bit hash
  • handles UTF-8 strings
  • returns int
fnv.fast1a32hexutf(string)
  • Calculate FNV-1a 32bit hash
  • handles UTF-8 strings
  • returns hex string
fnv.fast1a52utf(string)
  • Calculate FNV-1a 52bit hash
  • handles UTF-8 strings
  • returns int
fnv.fast1a52hexutf(string)
  • Calculate FNV-1a 52bit hash
  • handles UTF-8 strings
  • returns hex string
fnv.fast1a64utf(string)
  • Calculate FNV-1a 64bit hash
  • handles UTF-8 strings
  • returns hex string

License

MIT

Keywords

FAQs

Package last updated on 16 Nov 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc