Invisible Text
Hide a secret message in an ordinary text with invisible characters, and reveal what a pasted text hides
Found
Text without them
How it works
- Characters
- Four that have no width and draw nothing: zero-width space (U+200B), non-joiner (U+200C), joiner (U+200D) and word joiner (U+2060), each worth 2 bits, so 4 for a byte
- Where
- In one block after the first space of the text (at its end without one), where they change nothing: between two letters, the joiners would change how Arabic or Indic scripts are drawn
- Layout
- A byte for the version and the flags (encrypted, compressed), the message in UTF-8, compressed (deflate) when that makes it shorter, then a CRC-32 that tells this tool's characters from others' and a damaged message from a whole one
- Password
- AES-256-GCM, the key derived with PBKDF2-HMAC-SHA-256 (600,000 iterations, a random 16-byte salt), as in AES Encryption: the salt, the IV, then the ciphertext and its tag
- Reveal
- Also reads the text hidden in tag characters (U+E0020 to U+E007E, invisible copies of ASCII: how instructions are slipped to AI assistants), the bytes hidden in a run of variation selectors (one per byte, behind an emoji or a letter), and lists every other invisible character with where it is
It hides the message from the eye, not from a tool: Unicode Inspector, a code editor or this tool's Reveal find the characters at once, and anyone with this tool reads a message without password. They survive copy and paste, an email, most chats and documents, but not retyping, a screenshot, a PDF printed, or a site that cleans what's pasted. Some count them in a length limit. Everything runs in your browser: neither the text nor the message leaves this page.