b2KIT

Steganography Tool

Hide secret text messages inside images using LSB encoding. Upload an image to encode or decode hidden text.

How to Use Steganography Tool

  1. 1

    Upload an image

    Select the image to hide or extract a message from.

  2. 2

    Enter secret message

    Type the text you want to hide inside the image.

  3. 3

    Encode or decode

    Click encode to hide the message, or decode to reveal one.

  4. 4

    Download the result

    Save the image with the hidden message embedded.

Tested tool guide Tested browser tools Checked August 16, 2026

What Steganography Tool does, with a checked example

This tool hides a text message inside an image and recovers hidden text from an image. It works by replacing the least significant bit of each color channel: a channel byte like 200 changes to 201 or stays 200, a shift of one level out of 256 that is invisible in a photograph. Encoding and decoding run entirely in the browser, so the image and the message never leave your machine. The usual surprise is that the payload does not survive recompression: save the encoded result as a lossless format such as PNG, and never crop, resize, or re-save it. It hides text, it does not encrypt it.

Worked example

A concrete input and expected output from the current implementation.

Input

Message to hide: A. Carrier image, 2x2 pixels, rows as (R,G,B): (200,150,100) (50,75,125) / (10,20,30) (240,100,55).

Expected output

Encoded image, same pixel order: (200,151,100) (50,74,124) (10,21,30) (240,100,55). The eight channel least significant bits now read 0 1 0 0 0 0 0 1, which is binary 01000001, ASCII 65, the letter A.

Using the standard convention of one message bit per channel in pixel order, the letter A, binary 01000001, occupies eight channel LSBs. Four channels already ended in the matching bit and stay unchanged (200, 100, 50, 10); the other four shift by 1 (150 to 151, 75 to 74, 125 to 124, 20 to 21). Decoding the LSBs in the same order returns 01000001, the letter A.

How the result is produced

1

How the payload is stored

One message bit replaces the least significant bit of each 8-bit color channel in sequence, so a channel's value changes by at most 1 out of 256. Photographs hide these flips easily; flat color areas can show faint speckle. Capacity is width x height x channels per pixel / 8 bytes: a 1024x768 RGB photo holds 294,912 bytes, roughly 288 KiB.

2

Why PNG survives and JPEG does not

Decoding must read bits in the exact order they were written: same channel order, same pixel traversal, same place where the message length was recorded. Any later edit to the image can shift or erase those bits. JPEG re-encoding throws away low-order bits by design, so it destroys the payload. PNG is lossless, so an encoded PNG keeps every bit intact.

Good uses

  • Hide an access code, phone number, or one-time password inside a photo you were going to post anyway, and deliver the image through a normal channel.
  • Screen images from unfamiliar senders: run them through decode and look for a text payload before opening or acting on the attachment.
  • Stamp your own images with your name or contact text before publishing them, so you can identify your originals when copies show up elsewhere.

Limits and checks

  • An empty decode does not mean a clean image: other steganography tools use different bit order, channel order, or length conventions, and this tool reads only what it - or a compatible encoder - wrote.
  • The message is not encrypted, and the embedding is detectable by statistical analysis on low-noise or flat images, so treat this as concealment with weak protection, not as a secure channel.
  • The output is only as good as the file it lives in: re-saving as JPEG, cropping, resizing, rotating, or any upload that re-encodes the image erases the payload, and so does encoding into a JPEG, whose low bits are already gone.

Common questions

Is the hidden message encrypted?

No. LSB embedding changes pixel values; it does not scramble the text. Anyone who suspects the image carries a message, or runs a steganography scan over it, can read the text back out. If the content must stay confidential, encrypt it first with a proper encryption tool and hide the ciphertext instead. This tool provides hiding, not confidentiality.

Why does decoding my image come back empty even though I hid text in it?

Most likely the image went through lossy recompression after encoding. JPEG re-encoding discards exactly the low-order bits the message lives in, and many chat apps and services re-encode images on upload or download. Keep the encoded file in a lossless format such as PNG and do not crop, resize, or re-save it. A message encoded with a different tool may also fail to decode, because bit-order conventions vary.

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