Шифрованный текст: Nf. RC(/x=^A*

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

Описание логической структуры

Объекты CODEVIJINER.FRM и значения их свойств

Тип и номер1

Свойство

Значение

Form

Name

frmCodeVijiner

BorderStyle

4 – Fixed ToolWindows

Caption

Шифрование таблицей Вижинера

MaxButton

0 – False

MDIChild

-1 – True

MinButton

0 – False

ShowInTaskbar

0 – False

Label

1

Name

LabTitle

Alignment

2 – Center

Caption

ШИФРОВАНИЕ С ПОМОЩЬЮ ТАБЛИЦЕЙ ВИЖИНЕРА

Font

Underline

-1 – True

Label

2

Name

lblEntrance

Caption

1. Введите шифруемый текс:

Font

Underline

-1 – True

TextBox

3

Name

txtEntrance

Alignment

2 – Center

Font

Name

Courier New

Label

4

Name

lblKey

Caption

2. Введите ключ

Font

Underline

-1 – True

TextBox

5

Name

txtKey

Alignment

2 – Center

Font

Name

Courier New

CommandButton

6

Name

cmdCodeVijiner

Caption

Шифрование

TextBox

5

Name

txtTableVijiner

Font

Name

Courier New

MultiLine

-1 – True

ScrollBars

3 – Both

Label

11

Name

lblCodeVijiner

Caption

Полученный шифртекст

Font

Underline

-1 – True

TextBox

10

Name

txtCodeVijiner

Alignment

2 – Center

Font

Name

Courier New

1 Номер указанный в первой колонке, соответствует порядковому номеру объекта на форме (рис. )

Исходный код CODEVIJINER.FRM

Option Explicit

Private Sub cmdCodeVijiner_Click()

'Описываем переменные

Dim Alphabet As String 'Алфавит

Dim Key As String 'Ключевое слово

Dim EntranceText As String 'Шифруемый текст

Dim TableVijiner() As String 'Таблица Вижинера

Dim MarksInAlphabet As Integer 'Число знаков в алфавите

Dim MarksInKey As Integer 'Число знаков в ключе

Dim MarksInText As Integer 'Число знаков в тексте

Dim CodeVijiner As String 'Шифрованный текст

Dim i%, j%, k%, x%, Text$

'Вводим алфавит

Alphabet = "АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЭЮЯ"

'или

'Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXY"

'Вычисляем количество знаков в алфавите

MarksInAlphabet = CInt(Len(Alphabet))

'Вводим ключ

'и преобразуем прописные буквы в строчные

Key = StrConv(txtKey, vbUpperCase)

'Вычисляем количество знаков в ключе

MarksInKey = CInt(Len(Key))

'Проверям, есть ли подобные знаки в алфавите как в ключе

For i = 1 To MarksInKey

Text = Mid(Key, i, 1)

k = InStr(Alphabet, Text)

If k = 0 Then

MsgBox "Знак '" & Text & "' не найден в алфавите. " _

& "Введите другое ключевое слово.", , "Ошибка в ключе"

Exit Sub

End If

Next i

'Создаем таблицу Вижинера из алфавита

ReDim TableVijiner(MarksInAlphabet, MarksInAlphabet)

For i = 1 To MarksInAlphabet

k = i

For j = 1 To MarksInAlphabet

If k > MarksInAlphabet Then k = k - MarksInAlphabet

TableVijiner(i, j) = Mid(Alphabet, k, 1)

k = k + 1

Next j

Next i

'Вводим шифруемый текст

'и преобразуем прописные буквы в строчные

EntranceText = StrConv(txtEntrance, vbUpperCase)

'Вычисляем количество знаков в тексте

MarksInText = CInt(Len(EntranceText))

'Проверям, есть ли подобные знаки в алфавите как в тексте

For i = 1 To MarksInText

Text = Mid(EntranceText, i, 1)

If Text <> " " Then

k = InStr(Alphabet, Text)

If k = 0 Then

MsgBox "Знак '" & Text & "' не найден в алфавите. " _

& "Измените шифруемый текст.", , "Ошибка в тексте"

Exit Sub

End If

End If

Next i

'Шифруем текст

x = 1

For i = 1 To MarksInText

Text = Mid(EntranceText, i, 1)

If Text = " " Then

CodeVijiner = CodeVijiner & " "

Else

If x > MarksInKey Then x = 1

j = InStr(Alphabet, Mid(Key, x, 1))

x = x + 1

k = InStr(Alphabet, Text)

CodeVijiner = CodeVijiner & TableVijiner(k, j)

End If

Next i

'Выводим таблицу Вижинера

txtTableVijiner. Text = ""

For i = 1 To MarksInAlphabet

For j = 1 To MarksInAlphabet

txtTableVijiner. Text = txtTableVijiner. Text & TableVijiner(i, j)

Next j

txtTableVijiner. Text = txtTableVijiner. Text & vbCrLf

Next i

'Выводим шифрованный текст

txtCodeVijiner. Text = CodeVijiner

End Sub

Входные и выходные данные

Входными данными являются шифруемый текст и ключ.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7