Stego!   Text Steganography

Steganography is the art and science of hidden writing. While an encryption program such as our companion JavaScrypt page protects your message from being read by those not in possession of the key, sometimes you wish to obscure the very fact you're sending an encrypted message at all. An encoded message just screams you're using encryption, which may attract unwanted attention to your activities even if snoopers cannot read the text of your messages. Steganography attempts to conceal the presence of an encrypted message; over history a wide variety of techniques have been used: secret compartments in objects, invisible ink, microdots, grilles used to hide letters of a message among innocent text, and, in the digital age, embedding messages as imperceptible noise in images and audio files.

This page implements a very rudimentary form of steganography; an encrypted message is converted to what, at first glance, looks like English text. It is, in fact, English text, but complete nonsense, consisting of words chosen from a dictionary of 65536 (216) words, each encoding two bytes of the message in the position of the word in the dictionary. Punctuation and paragraph breaks are sprinkled through the text to make it look (marginally) more plausible. Let's be frank: anybody who gives this text more than a cursory glance is going to immediately twig to the fact that something very odd is going on here (unless, perhaps, you give it a suitably postmodern title and cast it as a paper published in Social Text). To make things less obvious, you may wish to embed the text generated by this page into a long document, having beforehand established a convention with your correspondent to permit them to locate it.

Cipher Text

To convert an encrypted message to English text, paste the cipher text generated by JavaScrypt into the box below, then press the Hide button. You can control the approximate length of lines of text by setting the Line length, and suppress the interspersing of punctuation and paragraph breaks by unchecking Punctuation. The cipher text may be in any of the encodings supported by JavaScrypt. If the cipher text lacks the sentinels normally included by JavaScrypt (for example, if you're using this page to convert a Base64 file generated by another program to text), you must specify the encoding by checking the corresponding button in the Encoding section below the Hidden Text box.

      Line length:     Punctuation

Hidden Text

To decode a message hidden as text, paste the hidden message into the box below. While blank lines and punctuation of all kinds are ignored, as is the case of letters, there must be no extraneous words in the text. Press the Seek button to decode the message into JavaScrypt-compatible cipher text in the box above. The cipher text will use the encoding specified by the Encoding buttons. If Base64 encoding is requested and the Sentinel box is unchecked, the usual JavaScrypt cipher text start and end sentinels will be omitted; this option permits creating Base64-encoded documents suitable for use with other programs.

Encoding:   Codegroup    Hexadecimal    Base 64  Sentinel?


Fourmilab Home Page

Valid XHTML 1.0
by John Walker
December, 2005
This document is in the public domain.
Use of this program to generate postmodern poetry or sociology theses is strictly forbidden.