pl% = INSTR(12, header$, "#")
oldplainf$ = RIGHT$(header$, 24 - pl%)
PRINT " Имя исходного файла: "; oldplainf$;
OPEN oldplainf$ FOR RANDOM AS 2
IF INSTR(oldplainf$, ".") THEN
PRINT " ([*.*] ";
ELSE
PRINT " ([*] ";
END IF
IF LOF(2) > 0 THEN PRINT "уже есть в каталоге";
PRINT ")"
CLOSE #2
plainf$ = ""
INPUT " Имя выходного файла: ", plainf$
IF plainf$ = "" THEN plainf$ = oldplainf$
plainf$ = RTRIM$(LTRIM$(plainf$))
IF INSTR(plainf$, "*.") THEN
IF INSTR(oldplainf$, ".") THEN
plainf$ = LEFT$(plainf$, INSTR(plainf$, "*.") - 1) + LEFT$(oldplainf$, INSTR(oldplainf$, ".")) + RIGHT$(plainf$, LEN(plainf$) - INSTR(plainf$, "*.") - 1)
ELSE
plainf$ = LEFT$(plainf$, INSTR(plainf$, "*.") - 1) + oldplainf$ + RIGHT$(plainf$, LEN(plainf$) - INSTR(plainf$, "*."))
END IF
END IF
IF (RIGHT$(plainf$, 1) = "*") THEN
IF plainf$ = "*" THEN
plainf$ = oldplainf$
ELSE
IF (MID$(plainf$, LEN(plainf$) - 1, 1) = ".") THEN
plainf$ = LEFT$(plainf$, INSTR(plainf$, ".") - 1) +
RIGHT$(oldplainf$, LEN(oldplainf$) -
INSTR(oldplainf$, ".") + 1)
ELSE
plainf$ = LEFT$(plainf$, LEN(plainf$) - 1) + oldplainf$
END IF
END IF
END IF
IF RIGHT$(plainf$, 1) = "\" THEN plainf$ = plainf$ + oldplainf$
Продолжение листинга 18.4
OPEN plainf$ FOR RANDOM AS 2
IF LOF(2) > 0 THEN
CLOSE #2
PRINT: PRINT "Уже есть файл с таким именем!"
SYSTEM
ELSE
CLOSE #2
OPEN plainf$ FOR BINARY AS 2
END IF
plaintekst$ = ""
blocks& = (LOF(1) \ 8) - 3
LOCATE rescue% + 11, 21: PRINT; "Расшифровывание: 0 %";
|
|
bigblocks&=(blocks&-1) \ 32
large$=space$(256)
FOR m& = 1 TO bigblocks&
outblock$=""
get$ #1,256,large$
for o%=1 to 256 step 8
outblock$=outblock$+desalg$(mid$(large$,o%,8))
next
put$ #2,outblock$
LOCATE rescue% + 11, 32: PRINT; USING "###"; (m& / (bigblocks&+1)) * 100;
next
FOR n& = (bigblocks&*32)+1 TO blocks& - 1
GET$ #1,8,ciphertekst$
plaintekst$ = desalg$(ciphertekst$)
PUT$ #2, plaintekst$
LOCATE rescue% + 11, 32: PRINT; USING "###"; (n& / blocks&) * 100;
NEXT n&
get$ #1,8,ciphertekst$
if len(ciphertekst$) > 0 then
plaintekst$ = desalg$(ciphertekst$)
IF rescue% THEN
last$ = plaintekst$
ELSE
Продолжение листинга 18.4
last$ = LEFT$(plaintekst$, lf& + 32 - LOF(1))
END IF
IF LEN(last$) > 0 THEN
PUT$ #2, last$
END IF
end if
CLOSE
LOCATE 11 + rescue%, 32: PRINT "100 % готово": PRINT
IF rescue% THEN
PRINT "Попытайтесь другим способом расшифровать этот файл."
ELSE
PRINT "Расшифровывание по алгоритму DES завершено."
END IF
SYSTEM
' Данные и функции
InitialTrl:
DATA 58,50,42,34,26,18,10,02,60,52,44,36,28,20,12,04
DATA 62,54,46,38,30,22,14,06,64,56,48,40,32,24,16,08
DATA 57,49,41,33,25,17,09,01,59,51,43,35,27,19,11,03
DATA 61,53,45,37,29,21,13,05,63,55,47,39,31,23,15,07
FinalTrl:
DATA 40,08,48,16,56,24,64,32,39,07,47,15,55,23,63,31
DATA 38,06,46,14,54,22,62,30,37,05,45,13,53,21,61,29
DATA 36,04,44,12,52,20,60,28,35,03,43,11,51,19,59,27
DATA 34,02,42,10,50,18,58,26,33,01,41,09,49,17,57,25
swappyl:
DATA 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
DATA 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
DATA 01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16
DATA 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
KeyTr1l:
DATA 57,49,41,33,25,17,09,01,58,50,42,34,26,18,10,02
DATA 59,51,43,35,27,19,11,03,60,52,44,36
DATA 63,55,47,39,31,23,15,07,62,54,46,38,30,22,14,06
DATA 61,53,45,37,29,21,13,05,28,20,12,04
Продолжение листинга 18.4
KeyTr2l:
DATA 14,17,11,24,01,05,03,28,15,06,21,10,23,19,12,04
DATA 26,08,16,07,27,20,13,02,41,52,31,37,47,55,30,40
DATA 51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32
etrl:
DATA 32,01,02,03,04,05,04,05,06,07,08,09,08,09,10,11
DATA 12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21
DATA 22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,01
ptrl:
DATA 16,07,20,21,29,12,28,17,01,15,23,26,05,18,31,10
DATA 02,08,24,14,32,27,03,09,19,13,30,06,22,11,04,25
sboxesl:
DATA 14,04,13,01,02,15,11,08,03,10,06,12,05,09,00,07
DATA 00,15,07,04,14,02,13,01,10,06,12,11,09,05,03,08
DATA 04,01,14,08,13,06,02,11,15,12,09,07,03,10,05,00
DATA 15,12,08,02,04,09,01,07,05,11,03,14,10,00,06,13
DATA 15,01,08,14,06,11,03,04,09,07,02,13,12,00,05,10
DATA 03,13,04,07,15,02,08,14,12,00,01,10,06,09,11,05
DATA 00,14,07,11,10,04,13,01,05,08,12,06,09,03,02,15
DATA 13,08,10,01,03,15,04,02,11,06,07,12,00,05,14,09
|
|
DATA 10,00,09,14,06,03,15,05,01,13,12,07,11,04,02,08
DATA 13,07,00,09,03,04,06,10,02,08,05,14,12,11,15,01
DATA 13,06,04,09,08,15,03,00,11,01,02,12,05,10,14,07
DATA 01,10,13,00,06,09,08,07,04,15,14,03,11,05,02,12
DATA 07,13,14,03,00,06,09,10,01,02,08,05,11,12,04,15
DATA 13,08,11,05,06,15,00,03,04,07,02,12,01,10,14,09
DATA 10,06,09,00,12,11,07,13,15,01,03,14,05,02,08,04
DATA 03,15,00,06,10,01,13,08,09,04,05,11,12,07,02,14
DATA 02,12,04,01,07,10,11,06,08,05,03,15,13,00,14,09
DATA 14,11,02,12,04,07,13,01,05,00,15,10,03,09,08,06
DATA 04,02,01,11,10,13,07,08,15,09,12,05,06,03,00,14
DATA 11,08,12,07,01,14,02,13,06,15,00,09,10,04,05,03