What this tool does
This is a zero-width steganography encoder and decoder. It hides a secret message inside invisible Unicode characters that occupy no visible space, so the cover text appears completely normal while secretly carrying your payload.
How it works
The encoder uses two zero-width code points as binary digits:
- Zero-width space
U+200Brepresents bit0 - Zero-width joiner
U+200Drepresents bit1
Each character of the secret is converted to its 8-bit value, every bit is mapped to one of those two invisible characters, and the sequence is embedded into the cover text. To keep the payload self-contained, the tool also frames it with a zero-width non-joiner U+200C boundary marker so the decoder knows exactly where the hidden data starts and ends.
Decoding scans the text for these zero-width characters, converts each back to a 0 or 1, regroups the bits into bytes, and reconstructs the original characters.
Step-by-step example
The letter H has ASCII code 72, which is 01001000 in binary. Encoded, it becomes eight invisible characters in sequence:
0 → U+200B (zero-width space)
1 → U+200D (zero-width joiner)
0 → U+200B
0 → U+200B
1 → U+200D
0 → U+200B
0 → U+200B
0 → U+200B
These eight characters are completely invisible in a text editor, browser, or chat message. The decoder simply reverses the process: extract U+200B/U+200D characters, map each to 0 or 1, group into 8-bit chunks, and recover the ASCII character.
A four-character secret like Hi! generates 32 zero-width characters inside the cover text — still completely invisible to any reader.
Payload size
Payload size grows linearly with the secret: each character of the secret requires 8 zero-width code points. A 10-character secret adds 80 invisible characters to the cover text. This is imperceptible visually but may be detectable by byte-length inspection — the encoded text will be significantly longer in bytes than it appears.
Where zero-width characters survive
Zero-width Unicode characters are preserved in:
- Most rich text editors (Google Docs, Word, Notion)
- Web forms and databases that store Unicode faithfully
- Chat apps that transmit full Unicode (Telegram, WhatsApp, Signal)
- Email body text
They are often stripped or normalised in:
- Plain-text terminals (some strip U+200B)
- Some social media platforms that sanitise Unicode
- SMS (constrained encoding)
- Any system that converts to ASCII or Latin-1
Always test your specific delivery channel before relying on the payload surviving.
This is not encryption
Zero-width steganography provides concealment (the message is hidden) but not confidentiality (it is not scrambled). Anyone who suspects zero-width encoding and extracts the invisible characters can read the message in plain text. To achieve genuine secrecy, encrypt the payload before encoding it — then the extracted bits reveal only ciphertext, not the message.
Notes
- Encrypt first if you need secrecy; this tool provides concealment only.
- Some platforms normalise or strip zero-width characters; verify your delivery channel preserves them.
- Because the payload is pure Unicode, it survives ordinary copy-paste better than trailing whitespace steganography does.
- To detect whether a piece of text contains zero-width characters, paste it into a hex editor or Unicode inspector and look for U+200B, U+200C, or U+200D.