Data update
This commit is contained in:
parent
5af6d93694
commit
796d366b97
455 changed files with 7413 additions and 1900 deletions
142
Task/Chaocipher/QBasic/chaocipher.basic
Normal file
142
Task/Chaocipher/QBasic/chaocipher.basic
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue