Initialize an incremental hashing context

- « hash_hmac

- hash_pbkdf2 »

- PHP Manual
- Hash Functions
- Initialize an incremental hashing context

# hash_init

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL hash >= 1.1)

hash_init — Initialize an incremental hashing context

### Description

hash_init(
string `$algo`,
int `$flags` = 0,
string `$key` = "",
array `$options` = []
): HashContext

### Parameters

`algo`

  Name of selected hashing algorithm (i.e. "md5", "sha256", "haval160,4", etc..). For a list of supported algorithms see hash_algos().

`flags`

  Optional settings for hash generation, currently supports only one option: `HASH_HMAC`. When specified, the `key` must be specified.

`key`

  When `HASH_HMAC` is specified for `flags`, a shared secret key to be used with the HMAC hashing method must be supplied in this parameter.

`options`

  An array of options for the various hashing algorithms. Currently, only the "seed" parameter is supported by the MurmurHash variants.

### Return Values

Returns a Hashing Context for use with hash_update(), hash_update_stream(), hash_update_file(), and hash_final().

### Errors/Exceptions

Throws a ValueError exception if `algo` is unknown or is a non-cryptographic hash function, or if `key` is empty.

### Changelog

Version | Description
--- | ---
8.1.0 | The `options` parameter has been added.
8.0.0 | Now throws an ValueError exception if the `algo` is unknown or is a non-cryptographic hash function, or if `key` is empty. Previously, `false` was returned and an `E_WARNING` message was emitted.
7.2.0 | Usage of non-cryptographic hash functions (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat) with `HASH_HMAC` was disabled.
7.2.0 | Return HashContext instead of resource.

### Examples

Example #1 Incremental hashing example

    <?php$hash = hash('sha256', 'The quick brown fox jumped over the lazy dog.');$ctx = hash_init('sha256');hash_update($ctx, 'The quick brown fox ');hash_update($ctx, 'jumped over the lazy dog.');$incremental_hash = hash_final($ctx);echo $incremental_hash, PHP_EOL;var_dump($hash === $incremental_hash);?>

The above example will output:

    68b1282b91de2c054c36629cb8dd447f12f096d3e3c587978dc2248444633483
    bool(true)

### See Also

- hash() - Generate a hash value (message digest)
- hash_algos() - Return a list of registered hashing algorithms
- hash_file() - Generate a hash value using the contents of a given file
- hash_hmac() - Generate a keyed hash value using the HMAC method
- hash_hmac_file() - Generate a keyed hash value using the HMAC method and the contents of a given file