Hashing
Purpose
BLAKE2b is a cryptographic hash function. It takes a message of any size and produces a 128-bit to 512-bit hash.
This hash acts as a fingerprint for the data. Hashes can be used to uniquely identify messages, detect corruption, detect duplicate data, and index data in a hash table.
However, unkeyed hashes do not provide authentication (e.g. for Encrypt-then-MAC). Furthermore, they should be avoided for key derivation. Use the linked APIs instead.
BLAKE2b is NOT suitable for hashing passwords. Use Argon2id instead.
A hash size of at least 256 bits is strongly recommended to obtain collision resistance.
Usage
ComputeHash
Fills a span with a hash computed from a message.
Exceptions
hash
has a length less than MinHashSize
or greater than MaxHashSize
.
The hash could not be computed.
ComputeHash
Fills a span with a hash computed from a Stream message. This is useful for hashing files.
Exceptions
hash
has a length less than MinHashSize
or greater than MaxHashSize
.
message
is null.
message
cannot be read.
The hash could not be computed.
IncrementalBLAKE2b
Provides support for computing a hash from several messages.
CacheState()
can only cache the state once. Each subsequent call will overwrite the previously cached state. See the Notes for when this method should be used.
Exceptions
hashSize
is less than MinHashSize
or greater than MaxHashSize
.
hash
has a length not equal to hashSize
.
The hash could not be computed.
Cannot update after finalizing or finalize twice (without reinitializing or restoring a cached state).
Cannot cache the state after finalizing (without reinitializing).
Cannot restore the state when it has not been cached.
The object has been disposed.
Constants
These are used for validation and/or save you defining your own constants.
Notes
Do NOT use ComputeHash()
for key derivation. Read the Key derivation page instead.
Do NOT manually truncate a hash. Instead, specify the hash size you want directly. The hash size affects the output, which provides domain separation.
Unlike older hash functions (e.g. MD5, SHA-1, SHA-256, and SHA-512), BLAKE2b is immune to length extension attacks.
If you are making multiple calls to IncrementalBLAKE2b
with unchanging/static data at the beginning, you can cache the state to improve performance. This allows you to only process this data once. It is more relevant in message authentication scenarios, as explained on that page.
The security level of BLAKE2b is 1/2 the output length (e.g. 128-bit security for a 256-bit hash).
Last updated