HTML → bits
The file becomes a sequence of zeros and ones. First, we add its size, filename and a checksum to verify it.
STEGANOGRAPHY IN THE BROWSER
Choose a photograph and an HTML file. The lab turns the website into bits, hides them in the pixel colors and generates a new image that looks identical.
The result will always be a PNG file: lossless compression keeps every hidden bit intact.
The file becomes a sequence of zeros and ones. First, we add its size, filename and a checksum to verify it.
Each bit replaces the last binary digit of a red, green or blue channel. The value changes by no more than one.
The decoder follows the same channels, reassembles the bytes and checks that the result is identical to the original.
Upload a browser-readable image or use the generated sample. The tool shows its resolution and calculates how many payload bytes its red, green, and blue channels can hold.
Upload one self-contained HTML file or use the interactive sample. Check the scaled preview and confirm that the complete packet fits inside the selected image.
Encode the packet, wait for the internal byte-for-byte round trip, then download the generated PNG. Keep this lossless file unchanged.
Open the Extract tab, load the generated PNG, and recover the website. The preview and HTML download become available only when the stored and calculated CRC-32 values match.
The encoder converts the UTF-8 filename and HTML into a versioned packet with a fixed signature, payload length, and CRC-32 checksum. It writes the packet one bit at a time into the least significant bit of each red, green, and blue channel, leaving alpha unchanged. The output is constructed as a non-interlaced 8-bit RGBA PNG with explicit IHDR, compressed IDAT, and IEND chunks. The decoder inflates and reverses the PNG scanline filters directly, which avoids the color-management rounding that can flip least significant bits when pixel values pass through a rendering engine. It then rebuilds the packet, checks its declared size, decodes UTF-8, and exposes the HTML only when the calculated CRC-32 matches the stored value.
The changed color values are normally invisible to the eye, but this simple sequential least-significant-bit method is not designed to resist statistical steganalysis.
The decoder depends on exact color values. PNG preserves them losslessly, while JPEG replaces pixel values during compression and usually destroys the stored bits.
Yes, after a successful checksum. The preview uses a sandboxed iframe that permits scripts, forms, and modals but does not grant the extracted page access to the parent application.
No. CRC-32 detects accidental changes in the recovered bytes. It does not hide the payload contents, authenticate the sender, or prevent deliberate modification.