hash_init

Initialize an incremental hashing context

&reftitle.description; `HashContext` `hash_init` `string` `algo` `int` `flags` 0 `string` `key`"" `array` `options`[]
&reftitle.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.

&reftitle.returnvalues;

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

&reftitle.errors;

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

&reftitle.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.

&reftitle.examples;

### 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);
    ?>

&example.outputs;

    68b1282b91de2c054c36629cb8dd447f12f096d3e3c587978dc2248444633483
    bool(true)

&reftitle.seealso;

- `hash`
- `hash_algos`
- `hash_file`
- `hash_hmac`
- `hash_hmac_file`