Продолжение листинга 18. 3. DIM ades(1 TO 64) AS shared integer DIM bdes(1 TO 64) AS shared integer DIM xdes(1 TO 64) AS shared integer

DIM ades(1 TO 64) AS shared INTEGER
DIM bdes(1 TO 64) AS shared INTEGER
DIM xdes(1 TO 64) AS shared INTEGER

DIM XT(1 TO 64) AS shared INTEGER

DIM P2(1 TO 64) AS shared INTEGER

' Главная программа
main:
CLS
parm$ = ltrim$(rtrim$(COMMAND$))+" "
IF LEN(parm$) > 1 THEN
Plainf$ = LTRIM$(RTRIM$(LEFT$(parm$, INSTR(parm$, " "))))
PRINT "Исходный файл: "; Plainf$
ELSE
INPUT "Исходный файл: ", plainf$
END IF
if len(plainf$)=0 then
print: print "СБОЙ: введите имя файла!"
system
end if
OPEN plainf$ FOR RANDOM AS 1
lof1& = LOF(1)
IF lof1& = 0 THEN
CLOSE #1
KILL plainf$
PRINT: PRINT "Файл не найден!";
SYSTEM
ELSE
IF lof1& > 9999999 THEN PRINT: PRINT "Исходный файл слишком велик!": SYSTEM
CLOSE #1
OPEN plainf$ for binary access read as #1
END IF

cipherf$ = ""
sp0% = 0: sp% = 0
DO
sp0% = sp%
sp% = INSTR(sp% + 1, plainf$, "\")

Продолжение листинга 18.3

LOOP WHILE sp% > 0
bplainf$ = RIGHT$(plainf$, LEN(plainf$) - (sp0%))
PRINT "Сохраняемое имя файла: "; bplainf$
pp% = INSTR(sp0% + 1, plainf$, ".")
IF pp% = 0 THEN
dcipherf$ = plainf$ + ".DES"
ELSE
dcipherf$ = LEFT$(plainf$, pp% - 1) + ".DES"
END IF
PRINT " По умолчанию: "; dcipherf$
INPUT "Выходной файл: ", cipherf$
IF cipherf$ = "" THEN cipherf$ = dcipherf$
OPEN cipherf$ FOR RANDOM AS 2
IF LOF(2) > 0 THEN
CLOSE #2
PRINT: PRINT "Выходной файл уже существует!"
SYSTEM
ELSE
CLOSE #2
OPEN cipherf$ FOR binary AS 2
END IF

PW$ = ""
LOCATE 9, 1
INPUT; " Пароль: ", PW$

IF (LEN(PW$) < 8) THEN PW$ = PW$ + STRING$(8 - LEN(PW$), 0)

IF len(pw$) = 16 then

LOCATE 9, 8: PRINT "Пароль: "; STRING$(16, 15); STRING$(10, " ")
PW$ = ucase$(PW$)
xtob PW$, P2()

ELSE

LOCATE 9, 8: PRINT "Пароль: "; STRING$(8, 15); STRING$(10, " ")
PW$ = LEFT$(PW$, 8)
stob PW$, P2()

end IF

Продолжение листинга 18.3

transpose P2(), KeyTr1(), 56
ciphertekst$ = ""
blocks& = lof1& \ 256

w = RND(-INT(TIMER))
anything$ = ""
FOR i% = 1 TO 12
anything$ = anything$ + CHR$(128 + INT(127 * RND(1)))
NEXT i%

header$ = "#" + LTRIM$(STR$(lof1&))
header$ = "DES" + LEFT$(anything$, 8 - LEN(header$)) + header$
header$ = header$ + RIGHT$(anything$, 12 - LEN(bplainf$)) +
"#" + bplainf$

cheader$=desalg$(left$(header$,8))+desalg$(MID$(header$,9,8))+desalg$(right$(header$,8))

put$ #2, cheader$

LOCATE 10, 8: PRINT; "Шифрование: 0 %";

inblock$=space$(256)

FOR n& = 1 TO blocks&
get$ #1,256,inblock$
outblock$=""
for b%=1 to 256 step 8
outblock$ = outblock$+desalg$(mid$(inblock$,b%,8))
next
Put$ #2, outblock$
LOCATE 10, 19: PRINT; USING "###"; (n& / blocks&) * 100;
NEXT n&

rest1 = lof1& MOD 256
rest2 = lof1& MOD 8
rest = rest1-rest2

IF rest1 > 0 THEN
outblock$=""
get$ #1,rest1,inblock$


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: