REM programma chifrovan/deshifrovan
DIM x(n), y$(n), y1$(255), x1(255), yk$(255), xk(255), xkd(255), ykd$(255)
n = 75
CLS
'формирование массива символов
y$(1) = "а": y$(2) = "б": y$(3) = "в": y$(4) = "г": y$(5) = "д"
y$(6) = "е" : y$(7) = "ё": y$(8) = "ж": y$(9) = "з": y$(10) = "и"
y$(11) = "й": y$(12) = "к": y$(13) = "л": y$(14) = "м": y$(15) = "н"
y$(16) = "о": y$(17) = "п": y$(18) = "р": y$(19) = "с": y$(20) = "т"
y$(21) = "у": y$(22) = "ф": y$(23) = "х": y$(24) = "ц": y$(25) = "ч"
y$(26) = "ш": y$(27) = "щ": y$(28) = "ъ": y$(29) = "ы": y$(30) = "ь"
y$(31) = "э": y$(32) = "ю": y$(33) = "я": y$(34) = " ": y$(35) = "-"
y$(36) = ".": y$(37) = "?": y$(38) = ",": y$(39) = "!": y$(40) = " "
y$(41) = ";": y$(42) = ":": y$(43) = "1": y$(44) = "2": y$(45) = "3"
y$(46) = "4": y$(47) = "5": y$(48) = "6": y$(49) = "7": y$(50) = "8"
y$(51) = "9": y$(52) = "0": y$(53) = "Й": y$(54) = "К": y$(55) = "Л":
y$(56) = "М" : y$(57) = "Н": y$(58) = "О": y$(59) = "П": y$(60) = "Р"
y$(61) = "С": y$(62) = "Т": y$(63) = "У": y$(64) = "Ф": y$(65) = "Х"
y$(66) = "Ц": y$(67) = "Ч": y$(68) = "Ш": y$(69) = "Щ": y$(60) = "Ъ"
y$(71) = "Ы": y$(72) = "Ь": y$(73) = "Э": y$(74) = "Ю": y$(75) = "Я"
'формирование массива кодов символов
FOR i = 1 TO 75
x(i) = i + 4
NEXT i
PRINT "введите: 1 - для шифрования; 2 - для дешифрования"
INPUT "v= "; V
IF V = 1 THEN GOTO 10
GOTO 20
10 PRINT "Работает программа шифрования"
INPUT "введите текст, подлежащий шифрованию: "; s$
p = LEN(s$) 'подсчет количества символов в тексе
' выделение символов в тексе и формирование массива символов текста y1$(p)
FOR i = 1 TO p
y1$(i) = MID$(s$, i, 1): 'выделяется один i-ый символ из текста s$
NEXT i
' установление соответствия между элементами массива символов текста y1$(p)
' и элементами массива кодов символов x1(p)
FOR j = 1 TO p
FOR i = 1 TO n
IF y1$(j) = y$(i) THEN x1(j) = x(i)
NEXT i
NEXT j
'печать на экран элементов массива символов и элементов массива кодов символов в соответствующих позициях экрана
FOR j = 1 TO p
LOCATE 5, 3 * j + 2
PRINT y1$(j)
FOR jj = 1 TO 500000
NEXT jj
LOCATE 6, 3 * j + 1
PRINT x1(j)
NEXT j
'кодирование с ключом
INPUT "введите ключ:"; k$
kl = LEN(k$)
'выделение символов в ключе и формирование массива символов ключа yk$(kl)
LOCATE 23, 5
PRINT "TIME 1: "; TIME$
FOR i = 1 TO kl
yk$(i) = MID$(k$, i, 1)
NEXT i
'установление соответствия между элементами массива символов ключа и элементами массива кодов
FOR j = 1 TO kl
FOR i = 1 TO n
IF yk$(j) = y$(i) THEN xk(j) = x(i)
NEXT i
NEXT j
'Печать элементов массива символов ключа и элементов массива кодов
FOR j = 1 TO kl
LOCATE 8, 3 * j + 2
PRINT yk$(j)
LOCATE 9, 3 * j + 1
PRINT xk(j)
NEXT j
'получение кода зашифрованного с ключом текста
kl1 = 0 'случай, когда число символов в тексте больше числа символов в ключе
FOR j = 1 TO p
IF kl1 = kl THEN kl1 = 0
kl1 = kl1 + 1
xkd(j) = x1(j) + xk(kl1)
LOCATE 11, 3 * j + 1
PRINT xkd(j)
NEXT j
'преобразование кода зашифрованного текста в последовательность символов
FOR j = 1 TO p
FOR i = 1 TO n
IF xkd(j) = x(i) THEN y1$(j) = y$(i)
NEXT i
LOCATE 12, 3 * j + 1
PRINT y1$(j)
NEXT j
LOCATE 23, 25
PRINT "TIME 2: "; TIME$
GOTO 30
20 PRINT "работает программа дешифрования"
INPUT "введите код зашифрованного текста без пробелов: "; kod$
p = LEN(kod$) 'установление количества символов в коде текста
60 'формирование массива символов зашифрованного текста
FOR i = 1 TO p
ykd$(i) = MID$(kod$, i, 1)
NEXT i
'формирование массива кодов символов зашифрованного текста
FOR j = 1 TO p
FOR i = 1 TO n
IF ykd$(j) = y$(i) THEN x1(j) = x(i)
NEXT i
NEXT j
INPUT "введите ключ: "; k$
kl = LEN(k$) 'количество символов в ключе
' выделение символов в ключе и формирование массива символов ключа yk$(kl)
FOR i = 1 TO kl
yk$(i) = MID$(k$, i, 1)
NEXT i
' формирование массива кодов символов ключа xk(kl)
FOR j = 1 TO kl
FOR i = 1 TO n
IF yk$(j) = y$(i) THEN xk(j) = x(i)
NEXT i
NEXT j
' получение дешифрованного с ключом текста
kl1 = 0
FOR j = 1 TO p
IF kl1 = kl THEN kl1 = 0
kl1 = kl1 + 1
xkd(j) = x1(j) - xk(kl1)
NEXT j
' установление соответствия кодов выводимым символам в массиве символов кода
FOR j = 1 TO p
FOR i = 1 TO n
IF xkd(j) = x(i) THEN y1$(j) = y$(i)
NEXT i
LOCATE 12, 3 * j + 1
PRINT y1$(j)
NEXT j
30 LOCATE 23, 25: PRINT "TIME 2: "; TIME$
STOP
Тестирование выполнено в программе QB64 ( Скачать )