WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

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

 1 A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * 2  # алфавит
 2 def f(text, k, op):
 3     k *= len(text) // len(k) + 1
 4     return ''.join([A[A.index(j) + int(k[i]) * op] for i, j in enumerate(mc)])
 5 def encrypt(message, key):
 6     return f(message, key, 1)
 7 def decrypt(ciphertext, key):
 8     return f(ciphertext, key, -1)
 9 print(encrypt('GRONSFELD', '2015'))  # шифрование
10 print(decrypt('IRPSUFFQF', '2015'))  # расшифровывание

СSharp

string key = "2015", text = "gronsfeld";
string abc = "abcdefghijklmnopqrstuvwxyz", newKey = key, result = "";
bool encode = true;
int op = encode ? +1 : -1, offset, indexOf = 0;
while (newKey.Length < text.Length)
{
    newKey += key;
}
if (newKey.Length > text.Length)
{
    newKey = newKey.Substring(0, newKey.Length - (newKey.Length - text.Length));
}
            
for (int i = 0; i < text.Length; i++)
{
    indexOf = abc.IndexOf(text[i]);
    if (indexOf != -1)
    {
        offset = abc.IndexOf(text[i]) + (Convert.ToInt32(newKey[i]) - 48) * op;
        if (offset > abc.Length)
            offset = offset - abc.Length;
        else if (offset < 0)
            offset = abc.Length + offset;
        result += abc[offset];
    } else
        result += text[i];
}

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.ru - проект по пересортировке и дополнению контента Википедии