Алгоритм шифра Скитала

      Комментарии к записи Алгоритм шифра Скитала отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 3 нед. назад.

  • Автор
    Сообщения
  • #3537

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

    При реализации алгоритма на ЭВМ, естественно, не используются палочки. Вместо них строка текста записывается в таблицу. Шифрование производится следующим образом:

    1. Вводится сообщение для шифровки.
    2. Высчитывается k – длина сообщения.
    3. Вводится «ключ» m – количество строк матрицы Скитала.
    4. Высчитывается количество столбцов n по формуле |(k-1) div n| + 1. Пример, разобранный ниже, поможет разобраться в происхождении формулы.
    5. Определяется новое положение буквы сообщения index по формуле:
      index = |m * (i mod n)| + |i div n|
      , тут i – текущее положение буквы в исходном сообщении.

    Блок-схема алгоритма:

    Пример шифрования методом Скитала

    :
    Сообщение: hello_world
    Длина сообщения: k=11
    Количество строк: m=4
    Количество столбцов: n=[(11-1)/4]+1=10/4+1=2+1 => n=3

    Запишем наше сообщение в матрицу m*n:

    h e l
    l o _
    w o r
    l d

    Теперь вместо символов напишем их индексы в исходном сообщении так, как оно читается:

    0 1 2
    3 4 5
    6 7 8
    9 10 11

    При шифровании методом Скитала шифруемое сообщение делится на блоки длинной n и каждый блок записывается слева направо в отдельную строку. Далее исходное сообщение читается последовательно по столбцам сверху вниз. Так и получается зашифрованное сообщение.

    Следовательно, в зашифрованном сообщении индексы символов будут расположены в порядке их прочтения следующим образом:

    0 4 8
    1 5 9
    2 6 10
    3 7 11

    Теперь мы видим, что, например, вместо индекса 5 символа стоит индекс 9 символа, вместо индекса 6 символа стоит индекс 2 символа:

    На рисунке слева приведена таблица исходного сообщения, а справа — зашифрованного.

    Чтобы определить, какое значение индекса зашифрованного сообщения будет находиться на месте индекса исходного сообщения, используем формулу index = |m * (i mod n)| + |i div n|. Разберемся как она получилась:

    • |i mod n| — определили столбец, в котором находится индекс;
    • |m * (i mod n)| — домножая на m, получаем кол-во символов, которые были записаны до него;
    • |i div n| — определили строку, в которой находится индекс;
    • |m * (i mod n)| + |i div n| сложим все и получим индекс символа зашифрованного сообщения, который будет стоять на месте индекса символа исходного сообщения.

    Пример расчета новых индексов:

    Проверить значения можно используя приведенную выше таблицу. Преобразовав все индексы получим зашифрованное сообщение "hlwleoodl r".

Для ответа в этой теме необходимо авторизоваться.