b2KIT

Image Steganography Tool

Hide and extract secret text messages within image files using LSB encoding.

Tested tool guide Tested browser tools Checked August 16, 2026

What Image Steganography Tool does, with a checked example

A picture that looks entirely normal can carry a hidden text message. This tool rewrites the least significant bit of each red, green, and blue channel value with one bit of the message, so a color changes by at most 1 out of 255 and the eye sees nothing. Each RGB pixel carries three hidden bits, and the same tool extracts the text back out. Everything runs in the browser; the image never leaves your machine. The usual surprise: save the encoded file in a lossless format like PNG or BMP. JPEG recompression destroys the hidden bits, and hiding is not encryption.

Worked example

A concrete input and expected output from the current implementation.

Input

Image: photo.png (1024 x 768 px, 24-bit RGB). Message: Invoice total is USD 1200.

Expected output

Capacity: 1024 x 768 x 3 = 2,359,296 bits = 294,912 bytes of payload space. The 26-byte message needs 26 x 8 = 208 of those bits, about 0.009% of capacity. The tool returns an encoded copy of the image that looks identical, and extraction from that copy reproduces the message exactly.

Each of the three color channels in an RGB pixel stores one hidden bit, so capacity is width x height x 3 bits, and a 26-character ASCII message is 26 bytes. PNG stores pixel values without loss, so the flipped bits survive and extraction returns the original text.

How the result is produced

1

LSB embedding

Every channel value is an 8-bit number from 0 to 255. The tool overwrites its lowest-order bit with one message bit, changing the value by at most 1, far less than the eye can distinguish. Message bits are placed in a fixed order across the image, three bits per pixel, and the payload records where the message ends so extraction stops cleanly.

2

Extraction and lossless hosts

Extraction reads the same lowest-order bits, reassembles them into bytes, and decodes them as text. It works only if the file kept those bits exactly as written: PNG and BMP store pixel values verbatim, so the message survives. JPEG does not. Its lossy compression rounds channel values on save, flipping the least significant bits and corrupting the payload.

Good uses

  • Send a short text payload through a channel that only accepts image attachments, such as a form or an allowed-file-type filter, when both sender and receiver know the technique.
  • Practice steganalysis: hide test messages in PNG files to see whether your own tooling, DLP rules, or detection scripts flag LSB-modified images.
  • Tag copies of a distributed image with a short ID string so a specific leaked file can be traced back to its recipient.

Limits and checks

  • Capacity is bounded by pixel count and color depth. A 1000 x 1000 RGB photo holds about 366 KiB of text, but a grayscale image holds one third as much, and a palette image such as GIF is a poor host because its index values cannot be nudged without visibly swapping colors.
  • The message dies silently in lossy pipelines. If the encoded image is saved as JPEG, resized, or re-encoded by any tool, the hidden bits are destroyed and extraction returns garbage or nothing, with no error explaining why.
  • Concealment is not security. LSB embedding is a published, widely known technique, and anyone can run this tool on a suspect image. Long messages also leave statistical traces and can band visibly in smooth gradients, which is exactly what steganalysis looks for.

Common questions

Can I hide a message in a JPEG photo?

Not reliably. JPEG's lossy compression changes channel values when the file is saved, so bits embedded in the original do not survive a JPEG re-save. Use a PNG or BMP as the carrier image and make sure the encoded result is saved in the same lossless format. This is the failure mode people hit most often.

Is my hidden message encrypted?

No. Hiding is encoding, not encryption. Anyone who knows the technique, or runs this tool, can extract the message, so treat it as concealed rather than secret. If the text must stay unreadable to whoever finds it, encrypt it first and hide the ciphertext instead.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools