Написать программу шифрования-дешифрования с ключом — QBasic(Бейсик)

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 ( Скачать )

Leave a Comment