Image LSB Steganography — Decode

Extract a UTF-8 message hidden in the LSBs of an image.

Open tool

Overview

The Image LSB Steganography Decode tool extracts a UTF-8 message that has been hidden inside the least-significant bits of an image's pixel channels. Upload a PNG (or another lossless container) that was encoded by a compatible LSB encoder and the tool reads back the hidden payload and prints it as a string.

Security analysts use this when investigating files flagged by a network filter, capture-the-flag players reach for it when a challenge involves a "innocent-looking" PNG, and curious users decode their own LSB-encoded test images to verify a hide-then-extract workflow round-trips correctly.

How it works

Least-significant-bit steganography hides one bit of payload per channel by overwriting the lowest bit of the channel's 8-bit value. Because flipping the low bit changes the colour by at most 1/255, the alteration is invisible to the naked eye but trivially recoverable by a program that knows where to look.

The decoder iterates the cover image's pixels in scan order (usually row-major, RGB channels in order, sometimes RGBA), reads each channel's low bit, and concatenates them into a byte stream. The first few bytes typically carry a length header so the decoder knows when to stop; the remainder is interpreted as UTF-8 text. If no compatible header is present the decoder may extract garbage, which is itself a signal that the image isn't an LSB cover.

Examples

Cover: family-photo.png (3 MB, looks unremarkable)
Hidden payload: "meet at 8pm by the bridge"

Cover: cat.png (rendered by the Encode tool)
Hidden payload: "the password is hunter2"

Cover: ordinary.jpg
Hidden payload: nothing — JPEG's lossy compression destroys LSBs.

FAQ

Why doesn't it work on JPEGs?

JPEG compression alters pixel values during the DCT and quantisation passes, which wipes out any LSB payload. The encoder only writes PNG (or other lossless containers) for that reason.

Does the decoder know which encoder was used?

It assumes the matching encoder's scan order and length header. Payloads written by other LSB tools may use a different layout and require the corresponding decoder.

Can I detect whether a file contains a payload?

Statistical "stegoanalysis" can flag suspicious bit-plane distributions, but a confident "yes" usually requires the matching decoder and a non-garbage result.

How big a message fits in a typical image?

One bit per channel times three channels per pixel — a 1 MP image holds roughly 375 KB of payload, far more than any short message needs.

Is this strong cryptography?

No. LSB steganography is about hiding the existence of a message, not protecting its contents. Encrypt sensitive payloads before encoding and only use the LSB layer for obscurity.

Try Image LSB Steganography — Decode

An unhandled error has occurred. Reload ×