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
hashlibwill 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
| Variant | Input | Expected 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()