FNV132 hash

 

About FNV132 hash

FNV-1 (Fowler-Noll-Vo) is a non-cryptographic hash function designed for fast hashing of data. FNV-1 32-bit (FNV-1a) specifically refers to a variant of the FNV-1 hash function that produces a 32-bit hash value. Here’s an overview of FNV-1a 32-bit:

Characteristics of FNV-1a 32-bit

  1. Output Size:

    • FNV-1a 32-bit produces a fixed-length output of 32 bits (4 bytes).
  2. Initialization Values:

    • FNV-1a initializes its hash value with a specified starting value. For FNV-1a 32-bit, the initial hash value (hash) is typically set to 0x811c9dc5.
  3. Prime and XOR Constants:

    • FNV-1a uses a prime number and XOR operation at each step of processing:
      • Prime: The prime number used for FNV-1a 32-bit is 0x01000193.
      • XOR: Each byte of the input data is XORed into the hash value.
  4. Hash Calculation:

    • For each byte data[i] in the input data:
      • Update the hash value using the formula: hash = (hash ^ data[i]) * Prime.
    • After processing all bytes, the hash value is the final 32-bit FNV-1a hash.
  5. Properties:

    • FNV-1a 32-bit is designed for fast hashing of data and is commonly used in applications where speed is prioritized over cryptographic security.
    • It is deterministic and produces the same hash value for identical input data.
    • FNV-1a is not suitable for cryptographic purposes due to its vulnerability to collision attacks and its predictable nature.

Usage

  • Applications: FNV-1a 32-bit is used in various applications such as hash tables, checksums, and non-critical hash-based operations where quick computation and distribution of hash values are necessary.
  • Implementation: It is straightforward to implement and is often used in combination with other hash functions or checksum algorithms to provide basic data integrity checks.

Example Calculation

Given a sequence of bytes data, the FNV-1a 32-bit hash FNV1a_32(data) is calculated as follows:

  • Initialize the hash value hash to 0x811c9dc5.
  • For each byte data[i] in the input data:
    • XOR hash with data[i].
    • Multiply hash by the prime number 0x01000193.
  • The final FNV-1a 32-bit hash value after processing all bytes is hash.

Security Considerations

  • FNV-1a 32-bit is not suitable for cryptographic applications due to its susceptibility to collision attacks and its predictable output.
  • It should not be used in scenarios where data security or cryptographic integrity is required.

Summary

FNV-1a 32-bit (FNV-1 32-bit) is a non-cryptographic hash function designed for fast computation of hash values. It produces a fixed-length 32-bit hash output and is commonly used in applications where speed and simplicity are prioritized over security, such as in hash tables and checksums.