Skip to main content

Guides

Text Steganography Explained

CleanPastedText editorial · Updated

Text workbench

Try it on your text

Cleaning mode

Removes hidden characters and standardizes AI-style punctuation.

Try a real example

Each sample contains a problem you cannot see.

Original

Pasted text

0 chars · 0 words

Cleaned

Ready to copy

0 changes

Text stays in this browser

Same words · No AI rewriting · No content logging

What is text steganography?

Text steganography hides a secret message inside ordinary-looking text so its existence goes unnoticed — the word comes from the Greek for "covered writing." That goal is what separates it from cryptography: an encrypted message is obviously a coded blob to anyone who sees it, while a successful steganographic message reads as completely normal text. Someone reading a note, an email, or a paragraph of body copy has no visual reason to suspect anything is hidden inside it.

This site's other Unicode coverage is mostly about the opposite problem — text that accidentally carries hidden characters left over from a chat UI or word processor. Text steganography is the deliberate version: someone chooses exactly what to hide and how, using one of three techniques with genuinely different mechanics and different weaknesses.

How does whitespace steganography work?

The oldest widely documented tool is SNOW ("Steganographic Nature Of Whitespace"), written by Matthew Kwan and documented in a manual page dated December 1996. SNOW conceals a message by appending sequences of up to seven trailing spaces, interspersed with tabs, to the ends of lines in a text file — a scheme that typically packs 3 bits into every 8 columns of trailing whitespace. Because most text viewers, terminals, and word processors render trailing spaces and tabs as nothing at all, the visible text is unchanged; only a byte-for-byte comparison or a whitespace-revealing editor mode shows anything was added.

PropertySNOW-style whitespace steganography
Where the payload livesTrailing spaces and tabs appended after the visible end of each line
Typical capacityAbout 3 bits per 8 columns of trailing whitespace, per line
What breaks itAny editor, formatter, or paste target that trims trailing whitespace
How to spot itA whitespace-revealing view, a byte diff against a known-clean copy, or a character-level scanner

That last row is also this technique's biggest weakness, and it is a practical one: a June 2026 peer-reviewed method called Innamark was built specifically to fix it, by substituting ordinary spaces for visually identical Unicode whitespace characters instead of appending trailing ones — keeping the payload robust against the copy-paste and reformatting that erases a classic SNOW payload, at the cost of a different character-level footprint that a scanner can still flag.

How does zero-width Unicode steganography work?

The second technique hides data in invisible characters rather than invisible whitespace. The Unicode standard includes several code points with no visible glyph — the zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D), and zero-width no-break space (U+FEFF, also the byte order mark) — and a common scheme uses a 4-character alphabet built from these to pack 2 bits into every inserted character, threading the sequence between or within words rather than only at line ends.

This is mechanically the same character layer covered on removing the zero-width space and the site's explanation of ASCII smuggling, which covers the specific case of hiding instructions for an AI model inside Unicode tag characters and variation selectors. Steganography is the older, broader idea; smuggling hidden instructions past an LLM's guardrails is one modern application of it, not a separate mechanism.

An August 2025 preprint, "Unveiling Unicode's Unseen Underpinnings in Undermining Authorship Attribution" (revised April 2026; not yet peer-reviewed), studies a defensive framing of the same technique: inserting zero-width characters inside words to distort the stylistic fingerprints that automated authorship-attribution tools rely on, without changing how the text reads to a human. It is a useful reminder that the same invisible-character channel that enables covert smuggling can also be proposed as a privacy tool — the character-level mechanism is neutral, and only the intent differs.

What is linguistic steganography?

Linguistic steganography hides data without adding or altering a single invisible character at all — it works by choosing between ordinary words. The best-studied form is synonym substitution: building a table that maps interchangeable word pairs to a 0 or a 1 (or a longer code, when a word has several synonyms), then rewriting a cover text so its sequence of synonym choices spells out the secret message. A survey of the field describes the core constraint plainly — only words with valid synonyms can carry a bit, and many synonyms are not interchangeable in every context, so contextual and collocation checks (often built on large n-gram corpora or a thesaurus such as WordNet) are needed to keep the rewritten text natural.

That contextual dependence is also why linguistic steganography resists the kind of scanning this site does for the other two methods. Whitespace and zero-width steganography add something a scanner can name by exact codepoint; a synonym-substituted sentence has no invisible or unusual character in it anywhere; every word is ordinary and correctly spelled. Detecting it means comparing the specific word choices against a reference — a known original, a corpus of typical usage, or an author's own established style — which is a linguistic problem, not a character-set problem.

How do you detect and remove it?

Whitespace steganography

Trimming trailing spaces and tabs from every line end destroys a SNOW-style payload outright. CleanPastedText's Whitespace control does this automatically and reports the trailing codepoints it removed by count.

Zero-width steganography

A character-level scanner that names every non-printable codepoint — like the "What changed" report — flags zero-width characters immediately, since legitimate prose rarely contains them outside the joiners some scripts need.

Linguistic steganography

No character cleaner can catch this — every word is real and correctly used. It requires comparing the wording against a known-clean version of the same text or a baseline of the author's usual style.

For the complete table of code points a scanner should watch for, see the full invisible Unicode characters list. For the Unicode-lookalike attack that works on visible characters instead of invisible ones, see homoglyph attack detection.

Common questions

Frequently asked questions

What is text steganography?

Text steganography is the practice of hiding a secret message inside ordinary-looking text so that its existence goes unnoticed, as opposed to cryptography, which scrambles a message's content but leaves it obviously encrypted. The main working techniques are whitespace steganography (encoding data in trailing spaces and tabs), zero-width Unicode steganography (encoding data in invisible characters like the zero-width space, U+200B), and linguistic steganography (encoding data by choosing between synonyms).

What is the SNOW steganography tool?

SNOW (Steganographic Nature Of Whitespace) is a program written by Matthew Kwan, documented in a manual page dated December 1996, that hides a message by appending sequences of up to seven trailing spaces interspersed with tabs to the ends of lines — a scheme that typically stores 3 bits every 8 columns. Because trailing whitespace is invisible in most text viewers and word processors, the cover text looks completely unchanged.

How does zero-width Unicode steganography differ from whitespace steganography?

Whitespace steganography adds trailing spaces and tabs at line ends, which line-wrapping, trimming, or a plain-text diff can disturb. Zero-width Unicode steganography instead inserts invisible characters such as the zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D), and zero-width no-break space (U+FEFF) between or within words, commonly using a 4-character alphabet to encode 2 bits per inserted character. It survives copy-paste into places whitespace does not, such as inside a single word or a URL.

Does CleanPastedText remove steganographic payloads?

It removes the two character-based methods as a side effect of ordinary cleanup: the Whitespace toggle trims trailing spaces and tabs from every line end, which erases a SNOW-style payload, and the Invisible characters toggle strips zero-width characters. It cannot detect linguistic steganography, since a synonym-substituted sentence still reads as ordinary, grammatical text with no unusual codepoint to flag — that requires comparing the wording against a known original or an author's normal style, not a character scan.

Is text steganography illegal?

The techniques themselves are legal and are published as open research and open-source tools; steganography has legitimate uses including digital watermarking, covert communication in censored environments, and academic research into information hiding. Legality depends entirely on what the hidden content is and why it's being sent, the same as any other communication method.

How is text steganography different from an AI text watermark?

Steganography hides an arbitrary secret message chosen by whoever encodes it. An AI text watermark instead marks the output of a specific system: a statistical watermark like SynthID-Text biases word probabilities during generation to leave a detectable-but-invisible signal with a fixed meaning (this text came from this model), while character-level artifacts like stray narrow no-break spaces are usually an unintentional side effect of a model's output pipeline, not a designed hidden channel.

Continue reading

Related guides & tools