Сделайте 1 ключ из 2 ключей Vigenere
У меня есть школьное задание о коде Vigenere.
У меня есть 2 ключа: AB и XYZ. Текст шифруется дважды этими ключами. Вопросы:
- Как сделать 1 ключ из этих 2?
- Как сделать 1 ключ, когда есть 3 ключа?
1 ответ
Решение
- Выберите длину комбинированного ключа как наименьшее общее кратное длины ключа.
- Повторяйте каждый ключ, пока он не заполнит комбинированный ключ
- Добавьте все повторяющиеся ключи.
Например с AB
а также XYZ
при условии, что A=0:
- Длина 2 и 3, общее кратное число 6.
AB AB AB
а такжеXYZ XYZ
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|)}