hash_init
(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL hash >= 1.1)
hash_init — Initialize an incremental hashing context
Description
string
$algo,int
$flags = 0,#[\SensitiveParameter] string
$key = "",array
$options = []): HashContext
Parameters
algoName of selected hashing algorithm (e.g.
"sha256"). For a list of supported algorithms see hash_algos().Note:
Non-cryptographic hash functions are not allowed if the
HASH_HMACflag is specified.flagsOptional settings for hash generation, currently supports only one option:
HASH_HMAC. When specified, thekeymust be specified.keyWhen
HASH_HMACis specified forflags, a shared secret key to be used with the HMAC hashing method must be supplied in this parameter.optionsAn 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
algois unknown or is a non-cryptographic hash function, or ifkeyis empty. - Passing configurations options of the wrong type in
optionswill now emit anE_DEPRECATEDerror because they can be interpreted incorrectly. This will become a ValueError in the future.
Changelog
| Version | Description |
|---|---|
| 8.4.0 | Passing options of a wrong type is now deprecated. |
| 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_algos() - Return a list of registered hashing algorithms
- hash_update() - Pump data into an active hashing context
- hash_update_file() - Pump data into an active hashing context from a file
- hash_update_stream() - Pump data into an active hashing context from an open stream
- hash_final() - Finalize an incremental hash and return resulting digest