Encyrpted data sample

PEChumbley at aol.com PEChumbley at aol.com
Wed Apr 9 12:04:00 EDT 2003


Hi All,

The following script can be used to encode/decode text.  First, you need to 
generate a file of random numbers (I'll call it the "keyFile") which must be 
saved on each computer where you want to send or receive encrypted data.  You 
only do this once and then save the same file to each computer.  In this 
sample, I generate a keyFile of 10,000 random numbers.  I made no provisions 
in the script for exceeding that amount.  This file will let you encrypt 
3,333 characters.  

The way the encryption works is simple.  You simply get the ASCII number for 
each character and add a random number to it.  If the resulting number is 
greater than 999, I drop the first digit to keep all code numbers at 3 
charaters.  I add the first char back when I decrypt whenever the decryption 
would result in a negative ASCII number.

In this example, you can create a field called "myText" where you type the 
message to be encrypted.  After running encodeMyText you can copy the encoded 
text and paste it into your message for transmission.  At the receiving end, 
it is important that *just* the coded message is pasted back into the field 
for decryption.  This is because, the first part of the message contains the 
starting place for using the random number file to encode/decode the data.  

By incrementing the starting number each time to the place where you last 
left off, the same numbers in the keyFile are never used again.  This is 
defined as a "one time pad."  The encryption is unbreakable (even by NSA).  
To maintain the intergrity of the code, you might want to have a different 
random number file for each direction you will be sending encrypted messages. 
 For example, if Bob sends a message to Jane, he might wish to encode it with 
keyFile A.  When Jane receives the message, she will decode it because she 
also has a copy of keyFile A on her computer.  However, if Jane wants to send 
a message back to Bob, she will encode it using keyFile B.  Bob also has a 
copy of keyFile B  so he can decode her message. By each user having their 
own keyFile for encryption, the chance of re-using numbers from one file is 
eliminated. (For instance, if Bob and Jane both wrote messages to each other 
at the same time using the same keyFile, there would be two messages in 
existence using the same numbers since the start numbers were not incremented 
sequentially.)  In my sample, I used an "A" to indicate the start of the 
encrypted message.  If Jane encrypts her message using keyFile B, she could 
indicate this by using a "B" instead of an "A."  Your decryption handler 
could then note this change in order to decode the message using the proper 
keyFile.

If anyone is interested in reading about codes and cyphers, I recommend an 
excellent book by David Kahn called "The Codebreakers."  There is also an 
excellent recent book called "The Code Book" by Simon Singh.

Hope this helps.

Philip Chumbley

------------------------------------------------------------------------------

---------------------
# myNumberFile is the file of random numbers which constitutes my keyFile
# myPointerFile stores the starting point for the next encryption of text

on generateNumbers
  # This handler will generate a keyFile containing 10,000 random numbers
  put empty into myNum
  repeat 10000
    put random(10) - 1 after myNum
  end repeat
  open file myNumberFile for write
  write myNum to file myNumberFile
  close file myNumberFile
  
  # Set the pointer to the start of the file
  put 1 into tStart
  open file myPointerFile for write
  write tStart to file myPointerFile
  close file myPointerFile
  beep
end generateNumbers

on encodeMyText
  # Takes text from field "myText" and encodes it and puts it back into the 
field
  put field myText into tText
  
  # Get the starting point
  open file myPointerFile for read
  read from file myPointerFile until eof
  close file myPointerFile
  put it into tStart
  put tStart into tStart0
  
  # Read in the keyFile (your random file)
  open file myNumberFile for read
  read from file myNumberFile until eof
  close file myNumberFile
  put it into myKey
  
  # Encrypt the text
  put empty into cipherText    # cipherText is the encyrpted message
  repeat for each char c in tText
    put char tStart to (tStart + 2) of myKey into cNum
    add 3 to tStart
    put charToNum(c) + cNum into charCodeNumber   
    if the number of chars in charCodeNumber = 4 then delete char 1 of 
charCodeNumber   # Save only the last three digits
    if the number of chars in charCodeNumber = 1 then put "00" & 
charCodeNumber into charCodeNumber
    if the number of chars in charCodeNumber = 2 then put "0" & 
charCodeNumber into charCodeNumber
    put space & charCodeNumber after cipherText
  end repeat
  # You must pass the starting point along with the cipherText
  put tStart0 & "A" & cipherText into field "myText"
  
  # Save the new starting point
  open file myPointerFile for write
  write tStart to file myPointerFile
  close file myPointerFile
end encodeMyText

on decodeMyText
  # Takes text from field 'myText" and decodes it and puts it back into field 
"myText"
  put field "myText" into tText
  
  # Read in the key
  open file myNumberFile for read
  read from file myNumberFile until eof
  close file myNumberFile
  put it into myKey
  
  # Get the starting point
  get offset("A",tText)
  put char 1 to (it - 1) of tText into tStart
  delete char 1 to it of tText
  
  # Decode the text
  put empty into plainText
  repeat for each word i in tText
    put i into ii
    put char tStart to (tStart + 2) of myKey into cNum
    add 3 to tStart
    if cNum > ii then add 1000 to ii
    put numToChar(ii - cNum) after plainText
  end repeat
  put plainText into field "myText"
  
  # Save the new starting point
  open file myPointerFile for write
  write tStart to file myPointerFile
  close file myPointerFile
end decodeMyText



More information about the metacard mailing list