Files

74 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

2025-04-08 10:39:13 +03:00
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