I wrote a textual steganography library and CLI in 2011, called Plainsight: <a href="https://github.com/rw/plainsight" rel="nofollow">https://github.com/rw/plainsight</a><p>Additionally, @workmajj and I wrote TweetFS using Plainsight. It lets you recursively pack up directories and post them as an encoded linked list of Tweets to Twitter: <a href="https://github.com/rw/tweetfs" rel="nofollow">https://github.com/rw/tweetfs</a><p>I presented Plainsight at Hack'n'Tell NYC in 2011 and a video was recorded: <a href="http://bit.ly/pecGgW" rel="nofollow">http://bit.ly/pecGgW</a><p>Plainsight uses each byte of the input message to generate tokens. Bits are used to decide how to traverse the token tree, weighted by frequency. The drawbacks are 1) verbosity and 2) incorrect grammar.<p>One of the lessons of writing Plainsight is that <i>spam can be used to contain secret messages</i>. Send enough gibberish to enough people, with your intended recipient included, and you'll look like a spammer--not a spy.<p>I also wrote a fuzzing tool, called Shag, to find edge cases, e.g. for single-byte inputs: <a href="https://github.com/rw/shag/blob/master/shag.rb" rel="nofollow">https://github.com/rw/shag/blob/master/shag.rb</a><p>-- Example 1 (regular text)<p>Type your message to encode:<p><pre><code> echo 'Meet at Union Square at noon. The password is FuriousGreen.' > cleartext
</code></pre>
Then, pipe it through Plainsight:<p><pre><code> cat cleartext | plainsight -m encipher -f sherlock.txt > ciphertext
</code></pre>
The output will be Doyle-esque gibberish:<p><pre><code> cat ciphertext | fold -s
which was the case, of a light. And, his hand. "BALLARAT." only applicant?"
decline be walking we do, the point of the little man in a strange, her
husband's hand, going said road, path but you do know what I have heard of you,
I found myself to get away from home and for the ventilator little cold night,
and I he had left my friend Sherlock of our visitor and he had an idea was not
to abuse step I of you, I knew what I was then the first signs it is the
daughter, at least a fellow-countryman. had come. as I have already explained,
the garden. what you can see a of importance. your hair. a picture upon of the
money which had brought a you have a little good deal in way: out to my wife
and hurry." made your hair. a charge me a series events, and excuse no sign his
note-book has come away and in my old Sherlock was already down to do with the
twisted
</code></pre>
Now, decipher that ciphertext:<p><pre><code> cat ciphertext | plainsight -m decipher -f sherlock.txt > deciphered
cat deciphered
Meet at Union Square at noon. The password is FuriousGreen.
</code></pre>
-- Example 2 (binary data)<p><pre><code> $ dd if=/dev/urandom of=/dev/stdout bs=1 count=10 | plainsight -m encipher -f 1984.txt
10+0 records in
10+0 records out
10 bytes (10 B) copied, 9e-05 s, 111 kB/s
Adding models:
Model: 1984.txt added in 0.89s (context == 2)
input is "<stdin>", output is "<stdout>"
enciphering: 100%|#####################################################################################################################################################################|474.67 B/s | Time: 0:00:00
which is a war is real, the proles used mind on the telescreen. He could see through all right to. You have read what said. 'Yes,' only in the Ministry</code></pre>