Шифр Виженера

В данной статье рассмотрим шифр Виженера. Будет описан алгоритм и написана программа на языке C#, реализующая классический шифр Виженера и шифрование гаммированием.

Шифр Виженера. Описание алгоритма

Шифрование методом Виженера производится по формуле:

Шифрование методом Виженера

где ci – символ закодированного сообщения, pi – символ исходного сообщения, ki – символ ключа, N – мощность алфавита (количество символов в алфавите).

Символы ключа накладываются на шифруемое сообщение циклически. Например, пусть исходное сообщение: программирование на c#, а ключ = vscode, тогда на данное сообщение ключ наложиться следующим образом:

Шифр Виженера. Пример наложения ключа

Расшифровка методом Виженера производится по формуле:

Расшифровка сообщения методом Виженера

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

Шифр Виженера. Реализация

Пусть алфавит задан в виде массива символов:

Тогда мощность алфавита будет равна:

Приведем реализацию метода на языке C#, шифрующего строку методом Виженера.

На вход поступает строка, которую нужно зашифровать (input) и ключ (keyword).

Теперь приведем реализацию метода, расшифровывающего строку.

Кроме того, для гаммирования понадобится генерирование псевдослучайного ключа. Вот метод, который делает это:

length – нужная длина ключа. startSeed – число, которым инициализируется генератор случайных чисел. Это число должно быть всегда одинаковым, таким образом и ключ будет всегда один и тот же.

Программа имеет следующий интерфейс:

Окно программы шифр Виженера

Код кнопки “Зашифровать” приведен ниже.

Происходит чтение данных из файла in.txt, выполняется шифрование (в зависимости от выбранного radioButton) и запись результата в файл out.txt.

Код кнопки “Расшифровать” приводится далее.

Демонстрация работы программы (шифрование и расшифровка данных методом Виженера) приведена на скриншоте ниже.

Демонстрация шифрования методом Виженера

Скачать исходник программы, рассмотренной в данной статье, можно, нажав на кнопку.

Скачать исходник

 

 

Шифр Виженера
5 (100%) 13 votes

Поделиться в соц. сетях:

3 комментария(ев) к статье “Шифр Виженера

  1. v40

    без кодировки вместо букв – нули

    //зашифровать
    private void buttonEncrypt_Click(object sender, EventArgs e)
    {
    if (radioButtonGamma.Checked)
    {
    string s;

    StreamReader sr = new StreamReader(“in.txt”,Encoding.GetEncoding(1251));
    StreamWriter sw = new StreamWriter (“out.txt”);

    далее по тексту.

    1. admin Автор статьи

      Так происходит, когда входной файл “in.txt” создается в Блокноте. По умолчанию Блокнот записывает файл в кодировке ANSI, поэтому, при чтении файла, в StreamReader нужно её указать явно.
      Если создать входной файл в кодировке UTF-8 без BOM (например, с помощью программы Notepad++), то указывать ничего не потребуется.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">