StegoToolkit

Text-in-Image Extractor

Extract hidden text from images. Auto-Detect tries 11 common LSB settings; manual mode, bit plane viewer, chi-square pre-scan, CTF flag detection and an optional AES-256 password.

Drop image or click to browse

PNG, BMP, WebP recommended — max 50 MB (10 MB mobile)

Processed in your browser — the image is analysed and any hidden text is extracted in this browser tab, not sent to a StegoToolkit server. Page views are counted without cookies; coarse tool-usage facts (such as file size range and the options chosen) are sent to Google Analytics only if it is configured and you accepted analytics cookies. The image, extracted text and password are never included. The extracted text is shown only in this tool.

How to Find Hidden Text in an Image (4 steps)

  1. Upload the PNG (or other image) that may contain hidden text; a quick chi-square pre-scan runs on upload
  2. Leave Auto-Detect on to try 11 fixed settings, or choose Manual mode and set the method, channel, bit depth and seed
  3. Run the extraction. Auto-Detect lists every setting that produced a length that makes sense, with the most text-like one first
  4. If the result looks encrypted, run Manual mode with the matching settings and the password

Text-in-Image Decoding Methods — What This Tool Handles

MethodTechniqueSpeedBest For
Auto-Detect (11 settings)Sequential on all channels at 1, 2 and 3 bits, on red and blue at 1 and 2 bits, and on green at 1 bit; Adaptive on all, red and blue at 1 bitDoes not try Scatter (needs the seed), password or Reed-SolomonFiles made with common settings
Manual decodeYou choose the method, channel, bit depth and, for Scatter, the seed; optional password and Reed-SolomonNeeds the exact settingsScatter, encrypted or Reed-Solomon messages
Chi-square pre-scanA test on pairs of pixel values per channel, run on uploadOne signal; usually quiet for plain textA hint about which channel changed, when the payload looks random
Bit plane viewerDraws all 24 bit planes (3 channels × 8 bits) as black-and-white picturesFor looking by eye; not conclusiveManual inspection of the low planes
Reed-Solomon (Manual)Removes the parity wrapper and repairs a few changed bytes per blockDoes not repair a re-saved or resized imageMessages made with an RS level

What the Extractor Reads

This Extractor reads text hidden by the Text-in-Image Hider. It reads bits from the lowest bits of the chosen channels, expects a 4-byte length first, and accepts the result only if that length fits inside the image and is at most 5,000,000 bytes. There is no signature, so the only check is that the length makes sense, and then how the bytes look (text, encrypted or noise).

It does not read data hidden by other tools, which use other layouts. For those, try the LSB Extractor with manual settings or the Steganography Analyzer, which shows the bit planes.

What Auto-Detect Tries, and What It Cannot

Auto-Detect tries 11 settings: Sequential on all channels at 1, 2 and 3 bits, on red and blue at 1 and 2 bits, on green at 1 bit, and Adaptive on all, red and blue at 1 bit. Each row is labelled text, encrypted, noise or empty. There is no signature, so a row is judged by whether its length fits the image and how its bytes read; a length that fits is not proof of a message, and unrelated data could in principle pass. It does not try Scatter, because it cannot guess the seed, and it does not use a password or Reed-Solomon, so an encrypted message is reported as encrypted and has to be decoded again in Manual mode with the password. In our tests a password-protected message of any length was recognised as encrypted from its layout.

Adaptive images made before the edge-map fix are read through a fallback that reproduces the old behaviour and are marked "older edge map" in the list. That restores messages that were written intact; a larger message that the old version had already corrupted when writing cannot be repaired.

Passwords and Wrong Passwords

If a password was used, run Manual mode with the same settings and the password. If the password is wrong, the payload is not encrypted or the data is damaged, the tool says so in an amber note and shows the undecrypted bytes; it cannot tell you which of the three it was. Only a successful decryption shows the green "AES-256-GCM ✓".

The password is turned into a key with PBKDF2-HMAC-SHA-256 (100,000 iterations) and the salt stored in the payload, and the AES-256-GCM authentication tag then checks it. A wrong password and a damaged payload both simply report failure, so the tool cannot tell you which it was, and there is no way to recover a forgotten password. The full description, including what this scheme does not protect, is on the Text-in-Image Hider page.

What the Chi-Square Pre-Scan Means

The pre-scan shows, for each channel, the p-value of a classic chi-square test on pairs of pixel values (2k and 2k+1). Replacing lowest bits with random-looking bits makes the two counts in each pair nearly equal, which pushes the p-value towards 1; the photographs we measured gave values near 0 before embedding. In our tests on seven real-photo crops the p-value stayed at 0.000 for a text payload at every fill level, and rose to between 0.86 and 1.000 (Sequential, Scatter) only when random-looking data filled the whole image; for Adaptive it did not reliably rise even then. Results vary with the image, the channel and the embedding settings. A low p-value does not prove an image is clean, and a high p-value does not prove that hidden data is present. Use Auto-Detect and the bit planes.

What Happens in Common Cases

The image isWhat the Extractor shows
Made by the Hider with the default settings, no passwordAuto-Detect lists the matching setting as text, and the message is shown
Made with a passwordAuto-Detect lists it as encrypted; Manual mode with the password shows the text
Same, wrong passwordAn amber note that the password did not decrypt the data, and the undecrypted bytes
Made with ScatterNot found by Auto-Detect; Manual mode with the same seed shows the text
An image without a matching payloadUsually noise or empty rows; a false positive is possible
Re-saved, resized or converted to JPEG after hidingUsually nothing is found
Made by another toolUsually nothing is found

Examples

Input: A 200 × 150 PNG made by the Hider in Quick mode (Adaptive Edge, all channels, 1 bit, no password) with the 40-character message 0123456789012345678901234567890123456789

Result: The row adaptive/ALL/1b is labelled text and shows the same 40 characters. On textured images another row, such as sequential/ALL/2b, can show the same text too

Meaning: The length header and the settings matched, so the message reads back exactly. The extra row appears because Adaptive also writes 2 bits at strong-edge pixels, so the first pixels of a textured image can look like a 2-bit Sequential layout; the first matching row is shown as the best match, so check the row list.

Input: The same image made with a password, extracted with Auto-Detect

Result: The row is labelled encrypted, with a hint to decode in Manual mode with the password

Meaning: Auto-Detect does not take a password. Run Manual mode with the same settings.

Input: The same file, Manual mode, wrong password

Result: An amber note: the password did not decrypt this data

Meaning: Wrong password, not encrypted, or damaged data; the tool cannot tell which.

How the Extractor Works

1. Read the image

The image is drawn onto a canvas and read as red, green and blue values.

2. Read the bits

For one setting, the lowest bits of the chosen channels are read pixel after pixel (in a seeded order for Scatter, or with the edge-based 1-or-2-bit rule for Adaptive).

3. Check the length

The first 32 bits are a length. It must fit inside the image and be at most 5,000,000 bytes, or that setting is rejected.

4. Unwrap

In Manual mode, Reed-Solomon parity is removed if selected, then the password is applied (AES-256-GCM).

5. Interpret

The bytes are labelled text (mostly printable, valid UTF-8, entropy below 6.5), encrypted (this toolkit's encrypted layout, or entropy above 7.5), binary or noise, and any flags like FLAG{...} are highlighted.

What the results mean

ResultWhat it meansWhat to do
Green banner with the textThe bytes look like readable textCopy it
Amber banner: encryptedEither the bytes match this toolkit's encrypted layout (good evidence) or they have very high entropy (also true of compressed data)Run Manual mode with the settings and the password
Amber note about the passwordWrong password, the payload is not encrypted, or the data is damagedCheck the password and settings
Banner: binaryMixed binary and textIt may be a file or a damaged message
Banner: nothing readableNo setting gave a length that fits and readable bytesCheck that you have the original PNG, or try Manual mode

Limitations

  • Only text hidden by this tool's Hider is read by Auto-Detect. Other tools use other layouts.
  • Auto-Detect tries 11 fixed settings. It does not try Scatter (it needs the seed), a password or Reed-Solomon.
  • A JPEG conversion (at any quality we tested, even 100) or a resize to 90% destroyed the hidden text in every one of seven real-photo tests, while lossless re-saves (PNG, BMP, TIFF) kept it. We could not test what individual websites and apps do to a photo.
  • The chi-square pre-scan and the bit planes are weak hints; a plain-text payload usually leaves the chi-square value at zero.
  • The Extractor reads at most 5,000,000 bytes.
  • This tool does the same kind of multi-setting scan as tools like zsteg and Stegsolve for a much smaller set of settings; it is not a replacement for their wider search.

Privacy

Your image and password are processed in your browser, in a Web Worker, and are not sent to a StegoToolkit upload server. The image-processing code does not transmit your image or the extracted text. Separate site analytics may send limited usage events (the options you choose such as the decode mode, the file's type and a size range, and how long processing took): page views are counted by Vercel Analytics, which is cookieless, and tool events go to Google Analytics only if the site has it configured and you accepted analytics cookies. Those events do not include your image, the extracted text, a password or the filename. If you accept cookies, the site may also load advertising and other analytics scripts that are not part of this tool. Your display mode preference is kept in this browser's localStorage.

Which Tool Next?

Frequently Asked Questions

How do I find hidden text in an image?

Upload the image and run Auto-Detect. It tries 11 settings and lists each as text, encrypted, noise or empty, with the readable one first. If nothing is found, check that you have the original PNG, then try Manual mode with the settings you know.

How does this compare with zsteg and Stegsolve?

zsteg is a command-line tool and Stegsolve a desktop Java app; both search many more bit orders and layouts than this tool, which tries 11 fixed settings and offers manual control. This one runs in your browser with no install.

What does the chi-square pre-scan tell me?

It is the p-value of one test on pairs of pixel values per channel. It rises towards 1 when the hidden bits look random and fill most of the image, and it stays near 0 for plain text, so a low p-value does not mean the image is clean. See the section above for the figures we measured.

What do the bit planes show?

Each plane is one bit of one colour channel drawn in black and white. The lowest planes of a natural photo usually look like noise. A hidden payload can show as a band of different texture where it was written, but this is not reliable, especially for short text or Scatter.

Auto-Detect found nothing. What next?

Use Manual mode and try: each channel on its own, 2 and 3 bits, and the Adaptive method. If a seed was used, choose Scatter and enter it. Also check that the file is the original PNG and was not re-saved, resized or converted.

The result is labelled encrypted. How do I decrypt it?

Run Manual mode with the same method, channel and bit depth, and enter the password. If the password is wrong the tool shows an amber note and the undecrypted bytes; it does not say whether the password, the settings or the data was the problem.

Is my image uploaded to a server?

No. The image is processed in your browser and is not sent to a StegoToolkit server. Coarse usage facts may be counted if you accept analytics; the image, extracted text and password are never included.

Can I use this for CTF challenges?

Yes, for images made with common LSB settings. Flags like FLAG{...}, HTB{...} and picoCTF{...} are highlighted. For other layouts use the bit planes, the LSB Extractor with manual settings or the Steganography Analyzer.

Related Tools