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)
- Upload the PNG (or other image) that may contain hidden text; a quick chi-square pre-scan runs on upload
- Leave Auto-Detect on to try 11 fixed settings, or choose Manual mode and set the method, channel, bit depth and seed
- Run the extraction. Auto-Detect lists every setting that produced a length that makes sense, with the most text-like one first
- If the result looks encrypted, run Manual mode with the matching settings and the password
Text-in-Image Decoding Methods — What This Tool Handles
| Method | Technique | Speed | Best 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 bit | Does not try Scatter (needs the seed), password or Reed-Solomon | Files made with common settings |
| Manual decode | You choose the method, channel, bit depth and, for Scatter, the seed; optional password and Reed-Solomon | Needs the exact settings | Scatter, encrypted or Reed-Solomon messages |
| Chi-square pre-scan | A test on pairs of pixel values per channel, run on upload | One signal; usually quiet for plain text | A hint about which channel changed, when the payload looks random |
| Bit plane viewer | Draws all 24 bit planes (3 channels × 8 bits) as black-and-white pictures | For looking by eye; not conclusive | Manual inspection of the low planes |
| Reed-Solomon (Manual) | Removes the parity wrapper and repairs a few changed bytes per block | Does not repair a re-saved or resized image | Messages 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 is | What the Extractor shows |
|---|---|
| Made by the Hider with the default settings, no password | Auto-Detect lists the matching setting as text, and the message is shown |
| Made with a password | Auto-Detect lists it as encrypted; Manual mode with the password shows the text |
| Same, wrong password | An amber note that the password did not decrypt the data, and the undecrypted bytes |
| Made with Scatter | Not found by Auto-Detect; Manual mode with the same seed shows the text |
| An image without a matching payload | Usually noise or empty rows; a false positive is possible |
| Re-saved, resized or converted to JPEG after hiding | Usually nothing is found |
| Made by another tool | Usually 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
| Result | What it means | What to do |
|---|---|---|
| Green banner with the text | The bytes look like readable text | Copy it |
| Amber banner: encrypted | Either 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 password | Wrong password, the payload is not encrypted, or the data is damaged | Check the password and settings |
| Banner: binary | Mixed binary and text | It may be a file or a damaged message |
| Banner: nothing readable | No setting gave a length that fits and readable bytes | Check 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?
- Text-in-Image Hider — Hide text in an image
- Image Steganography Extractor — Extract text or files hidden by the Image Hider
- LSB Extractor — Read LSB data with settings you choose
- Steganography Analyzer — Look at the bit planes of any image
- Steganography Detector — Test whether an image shows signs of hidden data
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
Text-in-Image Hider
Hide secret text inside an image with Sequential, Seeded Scatter or Adaptive Edge LSB. Shows PSNR and SSIM after encoding, optional AES-256 password, and always saves a PNG.
Steganography Detector
Statistical steganalysis with three published tests — chi-square, RS analysis and Sample Pairs — fused into one score and checked against the real StegExpose on a small test set. Payload size estimate. Method fingerprint. WAV audio support. Processed in your browser, not uploaded.
Image Steganography Hider
Hide secret messages or files inside PNG, BMP, WebP or JPEG images; the result is saved as PNG. Optional AES-256 encryption, processed in your browser.
Image Steganography Extractor
Extract hidden messages from steganographic image files. Auto-detect mode, bit plane analysis.