Bifid cipher: Difference between revisions

Applesoft BASIC
m (Removed unnecessary code.)
(Applesoft BASIC)
Line 204:
A 6 x 6 square allows all 36 letters & digits to be encoded:
The invasion will start on the 1st of January --> TTFAEWUAU9WTE3WP1S5KDF0B8M9AH7KHHVLAV --> THEINVASIONWILLSTARTONTHE1STOFJANUARY"</syntaxhighlight>
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
<syntaxhighlight lang="basic"> 100 A$ = "ATTACKATDAWN": GOSUB 160"REPORT
110 K$ = "BGWKZQPNDSIOAXEFCLUMTHYVR"
120 A$ = "FLEEATONCE": GOSUB 160"REPORT
130 K$ = " .'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123"
140 A$ = "THE INVASION WILL START ON THE FIRST OF JANUARY 2023.": GOSUB 160"REPORT
150 END
 
REM REPORT
160 GOSUB 200"ENCRYPT
165 PRINT M$M$"FOR "W" X "W" POLYBIUS:": M$=CHR$(13): FORI=1TOW:?,MID$(K$,(I-1)*W+1,W):NEXT
170 PRINT "ENCRYPTED: "E$
180 GOSUB 300"DECRYPT
190 PRINT "DECRYPTED: "U$;: RETURN
 
REM ENCRYPT A$ RETURNS E$
200 GOSUB 400 : L = LEN (A$):E$ = "": U$ = "" : IF NOT L THEN RETURN
210 FOR I = 1 TO L
220 C = ASC ( MID$ (A$,I,1)) : IF X(C) AND Y(C) THEN U$ = U$ + CHR$(C)
230 NEXT I
240 L = LEN(U$) : IF NOT L THEN RETURN
250 FOR I = 1 TO L : C = ASC ( MID$ (U$,I,1)) : A(I) = X(C) : A(I + L) = Y(C) : NEXT I
260 FOR I = 1 TO L * 2 STEP 2:E$ = E$ + MID$ (K$,(A(I) - 1) * W + A(I + 1),1): NEXT I
270 RETURN
 
REM DECRYPT E$ RETURNS U$
300 GOSUB 400 : L = LEN (E$):U$ = "": IF NOT L THEN RETURN
310 FOR I = 1 TO L:C = ASC (MID$ (E$,I)):B(I * 2 - 1) = X(C) : B(I * 2) = Y(C): NEXT I
320 FOR I = 1 TO L:U$ = U$ + MID$ (K$,(B(I) - 1) * W + B(L + I),1): NEXT I
330 RETURN
 
REM POLYBIUS K$ RETURNS X(255),Y(255)
400 IF K$ = P$ AND LEN(K$) THEN RETURN
410 IF XY THEN FOR I = 0 TO 255:X(I) = 0:Y(I) = 0: NEXT I
420 IF NOT XY THEN DIM X(255),Y(255),A(512),B(512) : XY = 1
430 IF K$ = "" THEN FOR I = 1 TO 25:K$ = K$ + CHR$ (I + 64 + (I > 9)): NEXT I
440 L = LEN (K$):W = INT(SQR (L - 1) + 1):I = 1:N = 1:K=ASC("0")
450 FOR X = 1 TO W
460 FOR Y = 1 TO W
470 C$ = MID$ (K$,I,1) : IF C$ = "" THEN FOR C = K TO 255: IF X(C) THEN NEXT C :STOP
480 IF C$ = "" THEN C$ = CHR$(C) : K$ = K$ + C$ : K = C + 1
490 C = ASC ( C$): Y(C) = Y:X(C) = X:I = I + 1:IF C$ = "J" THEN N = 0
500 NEXT Y,X
510 IF N THEN Y( ASC ("J")) = Y( ASC ("I")):X( ASC ("J")) = X( ASC ("I"))
520 P$ = K$
530 RETURN</syntaxhighlight>
=={{header|C++}}==
<syntaxhighlight lang="c++">
413

edits