Visual Cryptography

This page performs visual cryptography. Enter random keystrokes in the "passphrase" box, type a message in the "message" box, and hit "Make Images". Then print the two windows named "stream" and "ciphertext". Hold the two papers up to a light and align them to see the message, which is also shown in the window named "plaintext". One good way to see the message is to turn off the lights in the room, align the two printouts, and hold them against the computer monitor while displaying something white, such as an empty folder window.


1 pixel (illegible)
2 pixels (barely legible, page is 18 lines of 24 characters each)
3 pixels (page is 12 lines of 16 characters each)
6 pixels (page is 6 lines of 8 characters each)
12 pixels (page is 3 lines of 4 characters each)
SPECIAL FONT (must install David Chaum's TrueType font)
     Use darker lines

If there are spaces at the ends of the lines, or blank lines at the bottom, that will enlarge the pattern that is generated, and slow down the process. The given page sizes are for printing in portrait mode with half-inch margins. The exact size may be different for different browsers and printers. Generating the two new windows may take many minutes for large messages, such as the example message. Always use a different passphrase for each message.

If you want, you can remember the passphrase, use a message of all spaces, print out the "stream" window, and give that paper to the recipient. Later, when you have a message to send (with the same number of characters as was used before), you can reenter the same passphrase, enter the message, print out the "Ciphertext" window, and send that to the recipient. The ciphertext page can be decoded using the stream page that was printed earlier.

The "random" dots on the page are generated by RC4.

(c) 2000-2009 Leemon Baird