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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
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