DECLARE FUNCTION AlphaLeft$ (ct$, pt$, CharPos!) DECLARE FUNCTION AlphaRight$ (ct$, pt$, CharPos!) DECLARE FUNCTION Decode$ (Text$, ct$, pt$) DECLARE FUNCTION Encode$ (Text$, ct$, pt$) CLS ' Deciphering a Chaocipher-encrypted message is identical to the steps used ' for enciphering. The sole difference is that the decipherer locates the ' known ciphertext letter in the left (ct$) alphabet, with the plaintext ' letter being the corresponding letter in the right (pt$) alphabet ' ' Alphabet permuting is identical in enciphering and deciphering ' Start of Main Code ' LEFT (Cipher Text$): HXUCZVAMDSLKPEFJRIGTWOBNYQ tLeft$ = "HXUCZVAMDSLKPEFJRIGTWOBNYQ" ' RIGHT (Plain Text$): PTLNBQDEOYSFAVZKGJRIHWXUMC tRight$ = "PTLNBQDEOYSFAVZKGJRIHWXUMC" ' Cipher Message (Used to verify a good encoding) cText$ = "OAHQHCNYNXTSZJRRHJBYHQKSOUJY" ' Plain Text$ Message pText$ = "WELLDONEISBETTERTHANWELLSAID" PRINT " Plain Text$: "; pText$ PRINT ctLeft$ = tLeft$ ptRight$ = tRight$ ' Final Cipher Text$ eText$ = Encode$(pText$, ctLeft$, ptRight$) PRINT " Cipher Text$: "; eText$ PRINT IF eText$ = cText$ THEN PRINT "Successful" ELSE PRINT "Failed" ctLeft$ = tLeft$ ptRight$ = tRight$ dText$ = Decode$(eText$, ctLeft$, ptRight$) PRINT PRINT " Plain Text$: "; dText$ PRINT IF dText$ = pText$ THEN PRINT "Successful" ELSE PRINT "Failed" END ' Left Alphabet FUNCTION AlphaLeft$ (ct$, pt$, CharPos) tStr$ = ct$ ' 1. Shift the entire left alphabet cyclically so the ciphertext letter ' just enciphered is positioned at the zenith (i.e., position 1). tStr$ = RIGHT$(ct$, LEN(ct$) - CharPos + 1) + LEFT$(ct$, CharPos - 1) ' 2. Extract the letter found at position zenith+1 (i.e., the letter to ' the right of the zenith), taking it out of the alphabet, temporarily ' leaving an unfilled "Hole$" Hole$ = MID$(tStr$, 2, 1) MID$(tStr$, 2, 1) = " " ' 3. Shift all letters in positions zenith+2 up to, and including, the ' nadir (zenith+13), moving them one position to the left tStr$ = LEFT$(tStr$, 1) + MID$(tStr$, 3, 12) + " " + RIGHT$(tStr$, 12) ' 4. Insert the just-extracted letter into the nadir position ' (i.e., zenith+13) MID$(tStr$, 14, 1) = Hole$ AlphaLeft$ = tStr$ END FUNCTION ' Right Alphabet FUNCTION AlphaRight$ (ct$, pt$, CharPos) tStr$ = pt$ ' 1. Shift the entire right alphabet cyclically so the plaintext letter ' just enciphered is positioned at the zenith. tStr$ = RIGHT$(tStr$, LEN(tStr$) - CharPos + 1) + LEFT$(tStr$, CharPos - 1) ' 2. Now shift the entire alphabet one more position to the left (i.e., ' the leftmost letter moves cyclically to the far right), moving a new ' letter into the zenith position. tStr$ = RIGHT$(tStr$, 25) + LEFT$(tStr$, 1) ' 3. Extract the letter at position zenith+2, taking it out of the ' alphabet, temporarily leaving an unfilled "Hole$". Hole$ = MID$(tStr$, 3, 1) MID$(tStr$, 3, 1) = " ": ' 4. Shift all letters beginning with zenith+3 up to, and including, the ' nadir (zenith+13), moving them one position to the left. tStr$ = LEFT$(tStr$, 2) + MID$(tStr$, 4, 11) + " " + RIGHT$(tStr$, 12) ' 5. Insert the just-extracted letter into the nadir position (zenith+13) MID$(tStr$, 14, 1) = Hole$ AlphaRight$ = tStr$ END FUNCTION FUNCTION Decode$ (Text$, ct$, pt$) tStr$ = "" FOR t = 1 TO LEN(Text$) Char$ = MID$(Text$, t, 1) CharPos = INSTR(ct$, Char$) ct$ = AlphaLeft$(ct$, pt$, CharPos) pt$ = AlphaRight$(ct$, pt$, CharPos) tStr$ = tStr$ + RIGHT$(pt$, 1) NEXT Decode$ = tStr$ END FUNCTION FUNCTION Encode$ (Text$, ct$, pt$) tStr$ = "" FOR t = 1 TO LEN(Text$) Char$ = MID$(Text$, t, 1) CharPos = INSTR(pt$, Char$) ct$ = AlphaLeft$(ct$, pt$, CharPos) pt$ = AlphaRight$(ct$, pt$, CharPos) tStr$ = tStr$ + LEFT$(ct$, 1) NEXT Encode$ = tStr$ END FUNCTION