Смекни!
smekni.com

Криптология: подстановочно-перестановочный шифр и его применение (стр. 5 из 5)

Цитирую Гая Светония: "Существуют и его письма к Цицерону и письма к близким о домашних делах: в них, если нужно было сообщить что-нибудь негласно, он пользовался тайнописью, то есть менял буквы так, чтобы из них не складывалось ни одного слова. Чтобы разобрать и прочитать их, нужно читать всякий раз четвертую букву вместо первой, например, D вместо А и так далее".

Выражаясь современной терминологией, номер каждого символа при шифровании увеличивался на 3: А на D, B на E и т.д. Знаменитая фраза Цезаря VENI VIDI VICI (пришел, увидел, победил), посланная сенату после однодневной войны с Фарнаком, царем Понта, после зашифровки превратилось бы в SBKF SFAF SFZF. Для уточнения стоит отметить, что Гай Светоний ошибался, давая этому методу название тайнописи. Тайнопись - это сокрытие самого факта передачи сообщения, изложенное Светонием называется, в современной терминологии, шифром однозначной замены.

Криптоалгоритм будет реализован на ASCII-таблице. Для корректной реализации шифра еще потребуется нормализация, проводимая для того, чтобы множества совпадали и, естественно, размеры множеств открытого и шифротекста были равны (т.н. гомоморфизм). Для этого делается следующее: если сумма текущего номера и тройки выходит за пределы алфавита (размера множества разрешенных символов), то отсчет букв начинается сначала.

Программный код для шифрования текстовых сообщений по принципу «шифра Цезаря» на языке программирования Visual Basic

Пусть kk = 3 и кодируемой фразой будет «i remember that September». Будем использовать латинские буквы со стандартным следованием букв в алфавите. Результаты шифрования указанной выше фразы показаны ниже в таблице:

1 i r e m e m b e r t h a t s e p t e m b e r
2 9 0 18 5 13 5 13 2 5 18 0 20 8 1 20 0 19 5 16 20 5 13 2 5 18
3 12 3 21 8 16 8 16 5 8 21 3 23 11 4 23 3 22 8 19 23 8 16 5 8 21
4 l c u h p h p e h u c w k d w c v h s w h p e h u

Пояснения к таблице:

1-я строка – фраза для шифрования;

2-я строка – номера букв фразы для шифрования в латинском алфавите;

3-я строка – номера букв фразы для шифрования, увеличенные на 3;

4-я строка – зашифрованная фраза.

Спроектируем форму Form1, так чтобы было можно выполнять как кодирование, так и декодирование введенной фразы, рис. 1.

Рис. 1.

Рис. 2.

Подготовим программный код задачи кодирования по «Цезарю», так чтобы при шифровании пользователь мог выбирать величину сдвига kk.

Private Sub Command1_Click()

Dim a(27) As String * 1

Dim s$, t$, r$

Dim kk, m, l, i, j As Integer

kk = Text1.Text

s$ = Text2.Text

m = Len(s$)

kk = kk Mod 27

a(0) = " " : a(1) = "a" : a(2) = "b" : a(3) = "c" : a(4) = "d" : a(5) = "e" : a(6) = "f" : a(7) = "g"

a(8) = "h" : a(9) = "i" : a(10) = "j" : a(11) = "k" : a(12) = "l" : a(13) = "m" : a(14) = "n"

a(15) = "o" : a(16) = "p" : a(17) = "q" : a(18) = "r" : a(19) = "s" : a(20) = "t" : a(21) = "u"

a(22) = "v" : a(23) = "w" :a(24) = "x" : a(25) = "y" : a(26) = "z" : a(27) = " "

Rem Кодирование фразы If Check1.Value = 1 Then Check1.Caption = "Кодирование" For i = 1 To m t$ = Mid(s$, i, 1) For j = 1 To 27 If (t$ = a(j)) Then l = j Next j l = l + kk l = l Mod 27 r$ = r$ & a(l) Next i Text3.Text = r$ End If Rem Декодирование шифровки If Check1.Value = 0 Then Check1.Caption = "Декодирование" For i = 1 To m t$ = Mid(s$, i, 1) For j = 1 To 27 If (t$ = a(j)) Then l = j Next j l = l - kk If l <= 0 Then l = l + 27 r$ = r$ & a(l) Next i Text3.Text = r$ End If End Sub

Private Sub Command2_Click()

End

End Sub

Запустим программу на выполнение. Наберем число 3 в текстовом окне «Введите сдвиг», а в окне «Введите фразу»: i remember that September. Набор проводим строчными буквами, поскольку работа с прописными буквами в программе не предусмотрена. Проверив состояние контрольного индикатора (Кодирование), закодируем набранную фразу, щелкнув по кнопке «Обработать фразу». Результатом кодирования будет lcuhphpehucwkdwcvhswhpehu, рис. 2. Можно убедиться, что он совпадает с «найденным теоретически».

Декодируем полученную шифровку. Для этого перенесем зашифрованную фразу lcuhphpehucwkdwcvhswhpehu из окна «Результат» в окно «Введите фразу» и изменим состояние контрольного индикатора (уберем флажок). Снова щелкнем по кнопке «Обработать фразу» и в окне «Результат» появится исходная фраза i remember that September, рис. 3.

Теперь можно зашифровать ту же фразу для другого значения сдвига, пусть например kk = 5. Результат кодирования представлен на рис. 4.

Рис. 3.

Рис. 4.

Несмотря на простоту шифра Цезаря, шифровки Цезаря при его жизни ни разу не были декодированы его многочисленными врагами. Это объясняется, скорее всего, тем, что Цезарь применял не современную стандартную последовательность букв в латинском алфавите, а свою собственную, которую он хранил в глубокой тайне.

В дальнейшем можно увеличить сложность этой программы путем замены ключа выбираемого пользователем, ключом, определяемым программой (генератором псевдослучайных чисел), что усложнит работу аналитика .

Список использованной литературы:

  1. Ж . Брассар «Современная криптология», изд. «Полимед», 1999г.
  2. Библия , изд. «Московская патриархия», 1998 г.
  3. Учебник по программированию «Visual basic 6.0», изд. «Эком», 2002г.
  4. Н. Г. Волчёнков программирование на «Visual basic 6.0», изд. Инфра-м, 2002 г.