The resulting series of numbers are completely meaningless
without the one time pad that was used to generate them in the first
place. This is where the extreme strength of this code comes from.
The downside of this code is that you have to distrubute the one time
pad between you and your correspondant. This leaves you open to having
the one time pad stollen or discovered because it is physically in both
of your hands. Further, if you do not know your correspondant very well,
you are open to "man in the middle" attacks (someone, posing as your
correspondant, copies your one time pad prior to passing it along, thus
being able to review your conversation at will).
In this example, a simple one time pad is used. All visitors to this
web site compete for the same one time pad, but all enter it at different
locations. By this, I mean that this one time pad is not useful for
communicating between two different parites.
The original one time pad is:
This seemingly random set of number was originally the ASCII code to the
Gettysburg Address (trimed down to about 1000 characters). Then, as more and
more people visit this page, it becomes slightly mutated with each visit.
To use this list of seemingly meaningless random numbers, you would keep
track of which numbers you use. You and your correspondant would create
a system between you. For simplicity sake, let's just read across and then
top to bottom. So you would take the number 8 and then
add it to the "thing to encode", for instance the ASCII value for the character
'A' (which is 64) and you would get 72. This
then you would write down as your encrypted text. Next, you would highlight (or
otherwise mark out) the number off of the one time pad that you used, namely
8. Then you would take the next "thing to encode" and
repeat the process with the one time pad value 79.
To receive a coded message, you would then simply reverse the process. As the
decoder, your one time pad doesn't have 8 marked out yet,
so you would use it and subtract it from the first number in your encrypted text.
Then you would convert that using the ASCII character codes to receive your plain
By way of example, enter your plain text below and then press the 'Run' button.
As can be surmized from the resulting text, it's kinda messy. However, when you
and your correspondant are working from the same one time pad, you can decode
things fairly easily back to: