74 lines
1.8 KiB
Plaintext
74 lines
1.8 KiB
Plaintext
100 DATA firstkeyphrase
|
|||
|
|
110 DATA secondkeyphrase
|
||
|
|
120 PRINT "Initializing keys..."
|
||
|
|
130 RANDOMIZE
|
||
|
|
140 READ P1$,P2$
|
||
|
|
150 CALL KEYGEN(P1$,KA1$)
|
||
|
|
160 CALL KEYGEN(P2$,KA2$)
|
||
|
|
170 LINPUT "Operation (k/e/d): ";OP$
|
||
|
|
180 IF OP$="k" THEN 190 ELSE 220
|
||
|
|
190 PRINT "KA1: ";KA1$:PAUSE
|
||
|
|
200 PRINT "KA2: ";KA2$:PAUSE
|
||
|
|
210 GOTO 170
|
||
|
|
220 IF OP$="e" THEN 230 ELSE 270
|
||
|
|
230 LINPUT "Msg: ";MSG$:IF MSG$="" THEN 170
|
||
|
|
240 CALL DRENC(MSG$,KA1$,KA2$,RES$)
|
||
|
|
250 PRINT "Enc: ";RES$:PAUSE
|
||
|
|
260 GOTO 230
|
||
|
|
270 IF OP$="d" THEN 280 ELSE 170
|
||
|
|
280 LINPUT "Msg: ";MSG$:IF MSG$="" THEN 170
|
||
|
|
290 CALL DRDEC(MSG$,KA1$,KA2$,RES$)
|
||
|
|
300 PRINT "Dec: ";RES$:PAUSE
|
||
|
|
310 GOTO 280
|
||
|
|
320 SUB DRENC(M$,KA1$,KA2$,RES$)
|
||
|
|
330 OFFS=INT(26*RND)
|
||
|
|
340 RES$=SEG$(KA1$,OFFS+1,1)
|
||
|
|
350 L=LEN(M$):SK=1
|
||
|
|
360 FOR I=1 TO L
|
||
|
|
370 C$=SEG$(M$,I,1)
|
||
|
|
380 CI=POS(KA1$,C$,1)+OFFS
|
||
|
|
390 IF CI>26 THEN CI=CI-26
|
||
|
|
400 CT$=SEG$(KA1$,CI,1):RES$=RES$&CT$
|
||
|
|
410 SK=SK+1
|
||
|
|
420 IF SK=5 THEN 430 ELSE 440
|
||
|
|
430 SK=0:RES$=RES$&" "
|
||
|
|
440 OFFS=POS(KA2$,CT$,1)+I-1
|
||
|
|
450 IF OFFS>25 THEN OFFS=OFFS-26*INT(OFFS/26)
|
||
|
|
460 NEXT I
|
||
|
|
470 SUBEND
|
||
|
|
480 SUB DRDEC(M$,KA1$,KA2$,RES$)
|
||
|
|
490 OFFS=POS(KA1$,SEG$(M$,1,1),1)-1
|
||
|
|
500 M$=SEG$(M$,2,1024)
|
||
|
|
510 RES$="":L=LEN(M$):RI=0
|
||
|
|
520 FOR I=1 TO L
|
||
|
|
530 C$=SEG$(M$,I,1):IF C$=" " THEN 600
|
||
|
|
540 RI=RI+1
|
||
|
|
550 CI=POS(KA1$,C$,1)-OFFS
|
||
|
|
560 IF CI<1 THEN CI=CI+26
|
||
|
|
570 RES$=RES$&SEG$(KA1$,CI,1)
|
||
|
|
580 OFFS=POS(KA2$,C$,1)+RI-1
|
||
|
|
590 IF OFFS>25 THEN OFFS=OFFS-26*INT(OFFS/26)
|
||
|
|
600 NEXT I
|
||
|
|
610 SUBEND
|
||
|
|
620 SUB KEYGEN(P$,KA$)
|
||
|
|
630 KA$=""
|
||
|
|
640 L=LEN(P$)
|
||
|
|
650 FOR I=1 TO L
|
||
|
|
660 C$=SEG$(P$,I,1)
|
||
|
|
670 IF POS(KA$,C$,1)>0 THEN 680 ELSE 710
|
||
|
|
680 CK=ASC(C$)-72:IF CK>25 THEN CK=CK-26
|
||
|
|
690 C$=CHR$(97+CK)
|
||
|
|
700 GOTO 670
|
||
|
|
710 KA$=KA$&C$
|
||
|
|
720 NEXT I
|
||
|
|
730 KA$=KA$&"abcdefghijklmnopqrstuvwxyz"
|
||
|
|
740 KR$="":L2=LEN(KA$)
|
||
|
|
750 FOR I=1 TO L2
|
||
|
|
760 C$=SEG$(KA$,I,1)
|
||
|
|
770 IF POS(KR$,C$,1)=0 THEN KR$=KR$&C$
|
||
|
|
780 NEXT I
|
||
|
|
790 L=L-INT(L/26)*26
|
||
|
|
800 KA$=SEG$(KR$,L+1,26)&SEG$(KR$,1,L)
|
||
|
|
810 SUBEND
|
||
|
|
820 END
|