Шифрованный текст: 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 |


