Secret messages on the web: How to do steganography in JavaScript
oakes.github.com
oakes.github.com
Doesn't encryption make it easier to detect hidden messages, because it generates a uniform pseudorandom output, something that an image without the hidden message doesn't have?
This paper is really good at explaining image steganography from a beginner's standpoint: https://docs.google.com/viewer?a=v&q=cache:kWVnLQVjyR0J:...
In my opinion, the whole point of embedding a "secret" message in an object is defeated if there's the possibility that the "secret" may be revealed. The math involved in cryptography is much harder to defeat than the art of detecting a structured message layered into an object, so I prefer to just pass a plain-old encrypted message. But if you want to prevent someone even thinking you're passing an encrypted message, embedding that encrypted message in an image or audio can be beneficial. And risking someone finding out the actual secret just because you thought they might be able to tell you're sending one is not worth it.
Of course, all of this is moot if the image is lossily compressed.
Bonus points if you can split the steganographic data into multiple domains, where building the original message requires finding and assembling the pieces in the canvas, HTML and JS sections.
Also, I believe there may be blurring techniques you can use to smooth out the dense randomness that is a signature of encryption.