StegoToolkit

Whitespace Steganography Extractor

Extract hidden data from trailing whitespace, inter-word spacing, line endings, or indentation. WSST header auto-detect, SNOW-style raw mode, labelled headerless guess.

Auto-detect
Headerless guess

Enter Stego Text to Decode

Paste the text that may contain hidden whitespace steganography, or upload the original .txt file

Load demo stego text

Pre-encoded sample — extracts automatically

Paste text to scan for hidden data

How to Decode Whitespace Steganography (5 steps)

  1. Paste the suspicious text or upload the original .txt file (uploading keeps trailing whitespace that pasting may lose).
  2. Click Continue to Decode, then Extract Hidden Data. In Auto-detect (the default) a WSST header written by this site's Hider is found and decoded with no settings.
  3. For a headerless puzzle file, pick one method (or the SNOW-style raw format) instead of Auto-detect in Standard or Forensic mode.
  4. Enter the password if the payload was encrypted.
  5. Copy the hidden message or download the extracted file.

Whitespace Steganography Decoding — What This Tool Handles

MethodTechniqueWhen to UseNotes
WSST header (auto)Tries each of the 4 methods for a 9-byte "WSST" header with a valid CRC-8Files made by this site's HiderNo settings needed
SNOW-style rawTab-marked trailing whitespace with a 32-bit length, no headerPuzzles made with this site's SNOW-style modeNot the real SNOW program's format
Headerless guessReads Trailing Space/Tab, Inter-Word, Line Ending and Tab Indentation bits and scores them by how readable the first bytes areFiles whose method you do not knowA guess: it needs 10 or more readable characters, a flag shape or a file signature, and only the first 512 bytes are examined
AES-256-GCMDecrypts when the header's encrypted flag is setEncrypted payloadsA wrong password fails with a clear message

What This Extractor Reads

It reads files made by the Whitespace Steganography Hider. Auto-detect tries each of the four methods for a "WSST" header (magic bytes, method, flags, a 16-bit length of at most 65,535 bytes and a CRC-8). A header with a valid CRC-8 is accepted, and the Extractor then reads the number of bytes it states. A CRC-8 is a checksum against accidental changes: it does not authenticate the header and does not cover the message, so if the whitespace was altered after the header, the bytes can come back wrong even though the header passed. Only an AES-encrypted message is checked end to end, by AES-GCM itself.

If no header is found, Auto-detect tries the SNOW-style raw format, then reads Trailing Space/Tab (space = 0, tab = 1), Inter-Word, Line Ending and Tab Indentation bits without a header. It looks only at the first 512 bytes and keeps the longest candidate whose readability score is above 0.5 and that passes one of three checks: a PDF, ZIP, PNG or JPEG signature, a flag shape such as CTF{...}, or at least 10 readable characters at the start. That last step is a heuristic, labelled a guess in the result, not proof that anything is hidden: the longest candidate is not necessarily the right one, and ordinary whitespace patterns can occasionally pass. In our test (300 synthetic texts of 80 lines with random single or double spaces, trailing spaces or tabs and stray carriage returns, each read five ways: Auto-detect and the four methods one by one) nothing was reported as hidden data in 1,500 readings. That describes that test set, not real-world texts, and is not a guarantee. A hidden file's name is restored only when the Hider stored it (files, not typed text, in the WSST format, flag bit 5).

Real SNOW Files and Other Tools

This extractor was not built to read files made by the real SNOW program, which has its own bit packing and cipher; none was tested here. If your puzzle came from the real snow program, use that program (snow -C file) on a desktop. For other puzzles built on spaces, tabs or line endings, Manual mode with each method in turn sometimes finds readable text.

When Nothing Is Found

Work down this list. (1) Is it the original file? Copy-paste through a browser, editor or chat app often trims trailing whitespace or collapses spaces; upload the .txt file instead. (2) Was the file truncated? A header that promises more bytes than the text holds is reported as truncated rather than as a result. (3) Is it encrypted? Enter the password. (4) Try Manual mode with each method. (5) The text may simply have ordinary trailing spaces — compare with 'Show whitespace' before concluding anything is hidden.

Examples

Input: A .txt file made by the Hider with Trailing Space/Tab, message 'Hi', no password.

Result: Auto-detect finds the WSST header, reads 2 bytes and shows 'Hi' as text.

Meaning: Header found: the method and length came from the file itself.

Input: The same file cut off after 12 lines (the 72-bit header fits in 11 lines of 50 characters, the 2-byte message needs 13).

Result: A message saying the header was found but the text holds less data than it promises.

Meaning: Truncated files are reported, not returned as a short message.

Input: An encrypted file and a wrong password.

Result: An error that the password was wrong or the extracted bytes are damaged; no bytes are shown.

Meaning: AES-GCM authentication failed.

Input: Plain prose with no hidden data.

Result: A message that no header, SNOW-style marker or readable bytes were found.

Meaning: No header, no SNOW-style marker and no readable bytes in any method.

How the Whitespace Extractor Works

1. Look for the header

The first 72 bits of each method are read and tested against the WSST layout and CRC-8.

2. Read the payload

The number of bytes stated in the header is read with the same method; fewer bits than promised means the text was cut or changed.

3. Decrypt and decompress

If the header says so, AES-256-GCM is decrypted with your password and the result is inflated.

4. Interpret

The bytes are labelled text, a known file type or binary, and flags such as flag{…} are highlighted. Everything runs in your browser tab.

What the results mean

ResultWhat it meansWhat to do
Header foundA WSST header with a valid CRC-8 was found and the bytes it states were read. This does not prove the message is intact: CRC-8 covers the header only (an encrypted payload is checked by AES-GCM).Check the text makes sense; compare with the original file if you have it.
Guess without a headerNo header, but one method gave readable bytes. This is a guess.Check the text makes sense; try Manual mode to confirm.
Password needed or wrongThe header says the payload is encrypted.Enter the password; a wrong password and damaged data look the same.
Text shorter than the header saysThe text is truncated or its whitespace was changed.Use the original file.
Nothing foundNothing matched any check.Upload the original file, try Manual mode, or conclude there is nothing.

Limitations

  • Only this site's formats are read; files from the real SNOW program were not tested and are not expected to open.
  • The headerless guess examines the first 512 bytes and needs at least 10 readable characters from the start, a flag shape or a known file signature; shorter hidden messages need Manual mode.
  • The CRC-8 protects the header only; an unencrypted message altered afterwards may come back wrong without a warning.
  • Whitespace lost in transit cannot be recovered; the tool can only report that the data is missing.
  • Reed-Solomon error correction is not used in this format.

Privacy

Your pasted text, file and password are processed in this browser tab and are never sent to a server. Usage statistics may record which options were used, never your text.

Which Tool Next?

Frequently Asked Questions

Can this decode files from the real SNOW program?

No. It reads headerless, tab-marked trailing whitespace in this site's own layout (space = 0, tab = 1 after the marker, a 32-bit length), not SNOW's bit packing, and it has no ICE decryption. No file from the real program was tested here; use the real snow program for files made by it.

The text looks normal but extraction finds nothing — why?

The usual cause is that whitespace was lost: copy-paste through a browser, an editor with trim-on-save, a chat app or an email client can remove trailing spaces and tabs or collapse double spaces. Upload the original .txt file. Other causes are an encrypted file without the password, or no hidden data at all.

What does Show whitespace do?

It marks spaces with a dot, tabs with an arrow and line ends with a pilcrow, like cat -A. Consistent space and tab patterns at the end of many lines suggest trailing-whitespace hiding, but ordinary files can have them too.

How do I decode an inter-word spacing challenge?

Use Manual mode and pick Inter-Word Spacing. The decoder reads each gap of one or two spaces between words: one space is 0 and two spaces are 1. Auto-detect also tries it, as part of the headerless guess.

Is my text sent to a server?

No. Decoding and decryption run in your browser tab. Usage statistics may record which options you used, never your text or password.

Related Tools