Шифр Гронсфельда — полиалфавитный подстановочный шифр создан графом Гронсвельдом (руководителем первой дешифровальной службы Германии) в 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 править