Шифр Бофора

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

Шифр Бофораполиалфавитный подстановочный шифр, созданный сэром Фрэнсисом Бофортом. Шифр похож на шифр Виженера, со слегка измененным механизмом шифрования и использованием tabula recta (также известная как таблица Виженера). Применялся в роторной шифровальной машине M-209.

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

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

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

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

Tabula recta (или таблица Виженера)

Для того чтобы зашифровать открытый текст (M) с использованием ключа (K) нужно:

  1. Взять n-ый символ открытого текста (mn, где 0≤n<количество символов клера);
  2. Найти столбец ( j ) где символ в первой строке равен mn (s1 j = mn);
  3. Найти строку ( i ) где символ в j-ом столбце равен kn (si j = kn, где kn - n-ый символ ключа);
  4. Добавить к шифротексту ( C ) символ 1-го столбца i-ой строки (сn = si 1).

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

Для того чтобы дешифрировать шифротекст (C) с использованием ключа (K) нужно:

  1. Взять n-ый символ шифротекста (cn, где 0≤n<количество символов C);
  2. Найти строку ( i ) где символ в 1-м столбце равен cn (si 1 = cn);
  3. Найти столбец ( j ) где символ в i-ой строке равен kn (si j = kn, где kn - n-ый символ ключа);
  4. Добавить к расшифрованному тексту ( M ) символ 1-й строки j-го столбца (mn = s1 j).

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

Пусть дан исходный текст: C = "HELLOWORLD"
и ключ: K = "KEY"

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

Длина клера - 10 символов, значит и длина ключа также должна равнятся 10 символам.
K = "KEYKEYKEYK"

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

  • m1 = "H".
  • j = 8
  • i = 4
  • c1 = s4 1 = "D"
    C += "D" (C = "D")
  • m2 = "E"
  • j = 5
  • i = 1
  • c2 = s1 1 = "A"
    C += "A" (C = "DA")

. . . . . . . . .

  • m10 = "D"
  • j = 4
  • i = 8
  • c10 = s8 1 = "H"
    C += "H" (C = "DANZQCWNNH")

Шифротекст (C) - "DANZQCWNNH"

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

  • c1 = "D".
  • i = 4
  • j = 8
  • m1 = s1 8 = "H"
    M += "D" (M = "H")
  • c2 = "A"
  • i = 1
  • j = 5
  • m2 = s1 5 = "E"
    M += "E" (M = "HE")

. . . . . . . . .

  • c10 = "H"
  • i = 8
  • j= 4
  • c10 = s1 4 = "D"
    M += "H" (M = "HELLOWORLD")

Дешифрованный текст (M) - "HELLOWORLD"

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

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

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