hash_final finishes an incremental HashContext and returns its digest, optionally as raw binary instead of hexadecimal.
The examples explain the data format, expected results and the difference between this API and nearby cryptographic operations.
What It Does
The operation is intended for: hash_final finishes an incremental HashContext and returns its digest, optionally as raw binary instead of hexadecimal.
Part of core PHP or a normally bundled standard extension; check your deployment configuration.
Syntax and Return Value
hash_final(HashContext $context, bool $binary = ...): string
| Parameter | Purpose |
|---|---|
| $context (HashContext) | A fixed domain-separation label; do not mix keys from unrelated purposes. |
| $binary (bool) | Use the PHP signature above to determine the exact expected input type; validate untrusted inputs before calling. |
The declared return type is shown above. Errors can include false results or exceptions depending on this API: An ordinary hash is not encryption and is not a password-storage function. Use HMAC when a shared-secret authenticity check is needed.
Example 1: Basic Operation
Inspect the expected result: do not print secrets or reuse illustrative credentials in production.
<?php
$ctx = hash_init("sha256");
hash_update($ctx, "invoice-42");
echo hash_final($ctx);
Example 2: A Different Use Case
Inspect the expected result: do not print secrets or reuse illustrative credentials in production.
<?php
// Check the alternative case.
$ctx = hash_init("sha256");
hash_update($ctx, "approved-record");
echo hash_final($ctx);
Practical Example: Checking the Result
Inspect the expected result: do not print secrets or reuse illustrative credentials in production.
<?php
// Verify the expected behavior before using results.
$ctx = hash_init("sha256");
hash_update($ctx, "new-session");
echo hash_final($ctx);
Important Behavior and Edge Cases
An ordinary hash is not encryption and is not a password-storage function. Use HMAC when a shared-secret authenticity check is needed.
Distinguish digest encoding from secret-key authentication and keep fixed-length expected authentication values for comparisons.
Comparison with Related Functions
| Approach | Key distinction |
|---|---|
| hash_final | hash_final finishes an incremental HashContext and returns its digest, optionally as raw binary instead of hexadecimal. |
| Related technique | hash() computes a digest in one call; hash_init/hash_update/hash_final support incremental input. |
Common Beginner Mistakes
| Mistake | Correct approach |
|---|---|
| Confusing this operation with a neighboring cryptographic or security mechanism | hash() computes a digest in one call; hash_init/hash_update/hash_final support incremental input. |
| Ignoring a security prerequisite or failure case | An ordinary hash is not encryption and is not a password-storage function. Use HMAC when a shared-secret authenticity check is needed. |
Key Takeaways
- hash_final finishes an incremental HashContext and returns its digest, optionally as raw binary instead of hexadecimal.
- An ordinary hash is not encryption and is not a password-storage function. Use HMAC when a shared-secret authenticity check is needed.
- hash() computes a digest in one call; hash_init/hash_update/hash_final support incremental input.
Apply this behavior to a real application only after confirming the required extension, configuration and failure handling on the deployment runtime.