Zero-Width Character Steganography

Hide secret messages in plain text using invisible Unicode characters

Quick Demo Examples

Click to load sample data and see how zero-width steganography works:

0 characters
0 characters
0 characters
0 characters
0 characters
0 characters

About Zero-Width Character Steganography

How It Works

This tool hides secret messages within regular text using invisible Unicode characters. The encoding process follows these steps:

  1. Text to Binary Conversion: Your secret message is first converted to binary. Each character becomes an 8-bit binary number (e.g., 'A' = 01000001).
  2. Binary to Zero-Width Mapping: Each binary digit is mapped to an invisible character: '0' becomes U+200C (Zero Width Non-Joiner), '1' becomes U+200D (Zero Width Joiner), and spaces between bytes use U+200B (Zero Width Space).
  3. Insertion: The invisible character sequence is inserted into your cover text at the position you specify (start, middle, or end).
  4. Result: The output looks identical to the original cover text but contains your hidden message encoded as invisible characters.

Example: The letter 'A' (ASCII 65, binary 01000001) becomes: U+200C U+200D U+200C U+200C U+200C U+200C U+200C U+200D

Characters Used

  • U+200B (Zero Width Space): Separates bytes in the hidden message. This ensures the binary encoding can be properly reconstructed during decoding.
  • U+200C (Zero Width Non-Joiner): Represents binary '0'. Originally designed to prevent ligatures in text rendering.
  • U+200D (Zero Width Joiner): Represents binary '1'. Originally designed to create ligatures in text rendering.

These characters have zero width when displayed, making them completely invisible to human readers while still being present in the digital text. They're part of the Unicode standard and widely supported.

Decoding Process

Decoding reverses the encoding:

  1. Extract Zero-Width Characters: The decoder scans through the text and extracts only the zero-width characters.
  2. Convert to Binary: Each U+200C becomes '0' and each U+200D becomes '1', with U+200B marking byte boundaries.
  3. Binary to Text: The binary string is split into 8-bit chunks and each chunk is converted back to its original character.

Capacity and Overhead

Each character in your secret message requires 9 zero-width characters (8 bits + 1 separator). For example:

  • A 10-character secret message adds 90 invisible characters
  • A 100-character secret message adds 900 invisible characters
  • The overhead is approximately 9× the secret message length

The cover text can be any length - the invisible characters add minimal file size but don't visually change the text.