Hashprint Codec

Turn a SHA-256 or SHA-512 digest into a canonical picture that reads back to the exact digest, one cell per byte. Put two side by side and the answer is MATCH or MISMATCH with the bits and the cells counted, and every cell that differs shown with both bytes.

What this does and does not prove

A hashprint is a lossless picture of a digest, nothing more. Two prints that match mean the two digests are the same; they say nothing about where either digest came from, and a digest is only worth as much as the place you got it from. The border mark is a plain checksum that catches a cell copied wrongly or a print cropped in half. It is not a signature and it detects nothing an adversary did on purpose. This tool does not replace checking a digest against its source, and reading a print is a help to a person, not a proof.

HASHPRINT V1 / SHA-256 / 256 BITS
HASHPRINT V1 / SHA-256 / 256 BITS
ORIENTATION  SOLID RING WEDGE BAR (clockwise from top-left)
BORDER       CRC-16 0x06c6  [.....##.##...##.]

       1  2  3  4  5  6  7  8
  R1  He B2 H5 I5 B8 Oe Mb O0
  R2  J9 Fe Ed M7 A8 B8 F1 N4
  R3  B9 C7 Id Na Pa Na J3 N8
  R4  E7 B1 D5 E5 A4 K3 G7 O4

DIGEST  7e12758518eecbe0995e4dc7081851d419278ddafada93d84711354504a367e4

READ BACK FROM THE GRID  7e12758518eecbe0995e4dc7081851d419278ddafada93d84711354504a367e4

This is generated in browser and is not sent to pah.moi servers.

Want the digest itself first? The File Hasher & Checksum Verifier computes it from text or a local file. Looking for the decorative picture rather than the reversible one? That is the Hashprint identicon.

About this tool4 paragraphs

One byte, one cell, and the mapping runs both ways. The high half of a byte picks one of sixteen fixed shapes from a bundled atlas; the low half lights four corner markers, one per bit. Sixteen shapes times sixteen corner patterns is 256, which is exactly how many values a byte has, so every byte has one picture and every picture has one byte. SHA-256 lays 32 cells out eight across and four down; SHA-512 lays 64 out eight by eight. The shapes are drawn from whole-number rectangles written into the source rather than taken from a font on your machine, so the same digest draws the same picture everywhere, on screen and on paper.

Three marks say the print is intact, and they ship on by default. The header names the format, the algorithm and the length. Four fixed marks at the corners are read clockwise from the top left, so a print that has been rotated, mirrored or cropped is refused rather than read as a different digest. Sixteen marks in the lanes above and below are a checksum over the version, the algorithm and the digest, so a cell transcribed wrongly is caught. A print that fails any of these is refused whole; a best guess at a damaged print would break the only promise this format makes.

Comparing is where this earns its place. Two digests, two texts or two local files give a verdict, the bits that differ as a fraction of all of them, the cells that differ as a fraction of the grid, and then every differing cell with both bytes, their XOR and how many bits that is. That is the sentence people actually want: not "these look different" but "these differ in 3 of 32 cells, here".

Decoding reads a picture's own content, never a photograph. Paste back an SVG, a JSON export, a cell array or a bare digest and it is read from the glyphs and corners themselves; there is no hidden copy of the answer travelling alongside. There is no camera here and no shape recognition, and that is the format's boundary rather than a missing feature. Files you choose are hashed in the page and never leave it.

Use it locally This tool has a native command line twin. Build hashprint-codec-cli from the site's source with:
cargo build --release --bin hashprint-codec-cli
Source and licence terms