Шифр Гронсфельда

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Шифр Гронсфельда — полиалфавитный подстановочный шифр создан графом Гронсвельдом (руководителем первой дешифровальной службы Германии) в XVII веке. Шифр можно считать усовершенствованием шифра Цезаря (надежность) и Виженера / Бофора (скорость).

Описание[править | править код]

Ключ[править | править код]

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

Шифрование[править | править код]

Таблица Гронсфельда

Каждый символ Mi открытого текста M нужно на Ki (соответствующий символ ключа K) шагов сдвинуть вправо.
Или пользуясь таблицей Гронсфельда (Tx y, где x — номер строки, а y — номер столбца и отсчет ведется с нуля):
каждый символ Ci шифротекста C находится на пересечении столбца y, первый (заголовочный) символ которого равен соответствующему символу открытого текста Mi, и Ki-й (соответствующей цифры ключа) строки — (TKi y)

Дешифрование[править | править код]

Каждый символ (Ci) зашифрованного текста C нужно на Ki (соответствующий символ ключа K) шагов сдвинуть влево.
Или пользуясь таблицей Гронсфельда (Tx y, где x — номер строки, а y — номер столбца и отсчет ведется с нуля):
нужно в Ki (i-ая цифра ключа K) строке найти символ, который равен соответствующему символу шифротекста (TKi y = Ci), и первый (заголовочный) элемент столбца будет i-ый символ открытого текста.

Пример[править | править код]

Пусть дан исходный текст: M = «GRONSFELD»
и ключ: K = «2015»

Ключ[править | править код]

Длина слова — 9 символов, значит и длина ключа также должна равнятся 9 символам.
K = «201520152»

Шифрование[править | править код]

  • M1 = «G».
  • y = 6 (y — номер столбца)
  • K1 = 2
  • С1 = T2 6 = «I»
    C += «I» (C = «I»)
  • M2 = «R».
  • y = 17
  • K2 = 0
  • С2 = T0 17 = «R»
    C += «R» (C = «IR»)

. . . . . . . . .

  • M9 = «D»
  • y = 3
  • K9 = 2
  • С9 = T2 3 = «F»
    C += «F» (C = «IRPSUFFQF»)

Шифротекст (C) — «IRPSUFFQF»

Дешифрование[править | править код]

  • C1 = «I».
  • x = K1 = 2
  • y = 6 (y — индекс встречи Cn на x строке)
  • M += «G» (M = «G»)
  • C2 = «R»
  • x = K2 = 0
  • y = 17
  • M += «R» (M = «GR»)

. . . . . . . . .

  • C9 = «F»
  • x = K9 = 2
  • y = 3
  • M += «D» (M = «GRONSFELD»)

Дешифрованный текст (M) — «GRONSFELD»

Реализация[править | править код]

Python[править | править код]

C#[править | править код]

JavaScript[править | править код]