1

我有这个关于 Vigenere 代码的学校作业。

我有 2 个键:AB 和 XYZ。使用这些密钥对文本进行两次加密。问题是:

  • 如何从这 2 个钥匙中取出 1 个钥匙?
  • 有 3 把钥匙时如何制作 1 把钥匙?
4

2 回答 2

3
  1. 选择组合密钥的长度作为密钥长度的最小公倍数。
  2. 重复每个键,直到它填满组合键
  3. 添加所有重复的键。

例如ABXYZ假设 A=0:

  1. 长度是2和3,公倍数是6。
  2. AB AB ABXYZ XYZ
  3. A+X, B+Y, A+Z, B+X, A+Y, B+Z=XZZYYA

该算法适用于任意数量的密钥。

于 2014-09-02T11:00:31.960 回答
0

@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|)}
于 2020-11-02T18:25:57.363 回答