SHA-2 (source code)

= SHA-2
{c}

\b[SHA-2] is a family of <cryptographic hash functions> including <SHA-224>, <SHA-256>, <SHA-384>, <SHA-512>, <SHA-512 224> and <SHA-512 256>. NIST specifies these algorithms in FIPS 180-4. Their digest lengths are respectively 224, 256, 384, 512, 224 and 256 <bits>; the algorithm name therefore matters as well as the output size.<Secure Hash Standard by National Institute of Standards and Technology>[§1 and §5.3; §§6.2–6.7, algorithm definitions]{ref}

The SHA-224/SHA-256 branch uses 32-bit words and 512-bit message blocks. The SHA-384/SHA-512 branch and its specified truncation variants use 64-bit words and 1024-bit message blocks. Different initial values are part of the definitions. In particular, <SHA-512 256> is not simply the first 256 bits of an ordinary SHA-512 digest.<Secure Hash Standard by National Institute of Standards and Technology>[§§5.2–5.3 and §§6.3–6.7]{ref}

For a computed example, hashing the three ASCII bytes `61 62 63` with <SHA-512 256> produces

`53048e2681941ef99b2e29b76b4c7dabe4c2d0c634fc6d46e0e2f13107e7af23`.

Taking the first 256 bits of the <SHA-512> digest of those same bytes instead gives

`ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a`.

Both outputs occupy 32 bytes and require 64 <hexadecimal> digits, yet they differ. An interface identifying its hash only as a 256-bit digest leaves the selected algorithm ambiguous.

A digest is deterministic and does not conceal low-entropy inputs by itself. Nor does an unkeyed digest establish who supplied a message: a sender-authentication mechanism such as <HMAC> uses a <cryptographic key> and an appropriate security definition. <Preimage resistance>, <second-preimage resistance> and <collision resistance> are distinct properties; their meanings should not be replaced by the mere observation that two displayed examples have different outputs.