Сделайте 1 ключ из 2 ключей Vigenere

У меня есть школьное задание о коде Vigenere.

У меня есть 2 ключа: AB и XYZ. Текст шифруется дважды этими ключами. Вопросы:

  • Как сделать 1 ключ из этих 2?
  • Как сделать 1 ключ, когда есть 3 ключа?

1 ответ

Решение
  1. Выберите длину комбинированного ключа как наименьшее общее кратное длины ключа.
  2. Повторяйте каждый ключ, пока он не заполнит комбинированный ключ
  3. Добавьте все повторяющиеся ключи.

Например с AB а также XYZ при условии, что A=0:

  1. Длина 2 и 3, общее кратное число 6.
  2. AB AB AB а также XYZ XYZ
  3. A+X, B+Y, A+Z, B+X, A+Y, B+Z знак равно XZZYYA

Этот алгоритм работает с любым количеством ключей.

@CodesInChaos ответ отличный, но давайте добавим математику:

|C| = gcd(|A|, |B|)
# gcd: greatest common divisor.

Также обратите внимание, что вы можете вычислить значение комбинированного ключа:

Let's define the keys as:
A=(a_0,a_1,…,a_i)  
B=(b_0,b_1,…,b_j)

Then the value of the combined key is:

C={c_i=a_(i%|A|)+b_(i%|B|)   |   0≤i≤lcd(|A|,|B|)}

И может быть обобщен для каждого количества ключей:

C={c_i=a_(i%|A|)+b_(i%|B|)+...+z_(i%|Z|)   |   0≤i≤lcd(|A|,|B|,...,|Z|)}
Другие вопросы по тегам