Python SHA-3 Hash Code Example (Online Runner)

Python SHA-3 hashing code examples for SHA3-224/256/384/512 with runnable snippets and file hashing.

Online calculator: use the site SHA-3 text tool.

Calculation method

Python exposes SHA-3 via hashlib.sha3_224/256/384/512. The helper below matches the online tool by letting you pick which variant to run and reuses the same function for file hashing.

Implementation notes

  • Package: built-in hashlib.
  • Implementation: the variant selector maps directly to sha3_224/256/384/512; the output length is fixed per variant.
  • Notes: SHA-3 is different from SHA-2. For compatibility with tools labeled “Keccak”, SHA-3 in hashlib will not match.
python
import hashlib
from pathlib import Path
from typing import Literal

Variant = Literal["sha3-224", "sha3-256", "sha3-384", "sha3-512"]
VARIANTS = {
    "sha3-224": "sha3_224",
    "sha3-256": "sha3_256",
    "sha3-384": "sha3_384",
    "sha3-512": "sha3_512",
}


def sha3_text(text: str, variant: Variant = "sha3-256", encoding: str = "utf-8") -> str:
    algo = VARIANTS[variant]
    hasher = getattr(hashlib, algo)()
    hasher.update(text.encode(encoding))
    return hasher.hexdigest()


def sha3_file(path: Path, variant: Variant = "sha3-256", chunk_size: int = 1024 * 1024) -> str:
    algo = VARIANTS[variant]
    hasher = getattr(hashlib, algo)()
    with path.open("rb") as handle:
        for chunk in iter(lambda: handle.read(chunk_size), b""):
            hasher.update(chunk)
    return hasher.hexdigest()

# Example usage
payload = "hello world"

print(sha3_text(payload, variant="sha3-256"))
print(sha3_text(payload, variant="sha3-512"))

File hashing example

python
from pathlib import Path
import tempfile
import hashlib
from typing import Literal

Variant = Literal["sha3-224", "sha3-256", "sha3-384", "sha3-512"]
VARIANTS = {
    "sha3-224": "sha3_224",
    "sha3-256": "sha3_256",
    "sha3-384": "sha3_384",
    "sha3-512": "sha3_512",
}


def sha3_file(path: Path, variant: Variant = "sha3-256", chunk_size: int = 1024 * 1024) -> str:
    algo = VARIANTS[variant]
    hasher = getattr(hashlib, algo)()
    with path.open("rb") as handle:
        for chunk in iter(lambda: handle.read(chunk_size), b""):
            hasher.update(chunk)
    return hasher.hexdigest()


with tempfile.TemporaryDirectory() as temp_dir:
    sample_path = Path(temp_dir) / "example.bin"
    sample_path.write_bytes(b"example payload\n")
    print(sha3_file(sample_path, variant="sha3-256"))

Test vectors

VariantInputExpected digest
SHA3-224(empty string)6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7
SHA3-256(empty string)a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
SHA3-384(empty string)0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004
SHA3-512(empty string)a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26

Complete script (implementation + tests)

python
import hashlib
from pathlib import Path
from typing import Literal

Variant = Literal["sha3-224", "sha3-256", "sha3-384", "sha3-512"]
VARIANTS = {
    "sha3-224": "sha3_224",
    "sha3-256": "sha3_256",
    "sha3-384": "sha3_384",
    "sha3-512": "sha3_512",
}

TEST_VECTORS = {
    "sha3-224": {
        "": "6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7",
        "abc": "e642824c3f8cf24ad09234ee7d3c766fc9a3a5168d0c94ad73b46fdf",
    },
    "sha3-256": {
        "": "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a",
        "abc": "3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532",
    },
    "sha3-384": {
        "": "0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004",
        "abc": "ec01498288516fc926459f58e2c6ad8df9b473cb0fc08c2596da7cf0e49be4b298d88cea927ac7f539f1edf228376d25",
    },
    "sha3-512": {
        "": "a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26",
        "abc": "b751850b1a57168a5693cd924b6b096e08f621827444f70d884f5d0240d2712e10e116e9192af3c91a7ec57647e3934057340b4cf408d5a56592f8274eec53f0",
    },
}


def sha3_text(text: str, variant: Variant = "sha3-256", encoding: str = "utf-8") -> str:
    algo = VARIANTS[variant]
    hasher = getattr(hashlib, algo)()
    hasher.update(text.encode(encoding))
    return hasher.hexdigest()


def sha3_file(path: Path, variant: Variant = "sha3-256", chunk_size: int = 1024 * 1024) -> str:
    algo = VARIANTS[variant]
    hasher = getattr(hashlib, algo)()
    with path.open("rb") as handle:
        for chunk in iter(lambda: handle.read(chunk_size), b""):
            hasher.update(chunk)
    return hasher.hexdigest()


def run_tests() -> None:
    for variant, vectors in TEST_VECTORS.items():
        for text, expected in vectors.items():
            actual = sha3_text(text, variant=variant)
            assert actual == expected, f"{variant} mismatch for {text!r}: {actual} != {expected}"
    print("All SHA-3 test vectors passed.")


if __name__ == "__main__":
    run_tests()