Speck密码的实现

Implementation of Speck cipher

我正在尝试实现此处指定的 speck 密码:Speck Cipher。在文档的第 18 页上,您可以找到我想要实现的一些伪代码。

看来我对伪代码的理解有问题。你可以在那里找到,xy 是长度为 n 的明文单词。 l[m-2],...l[0]k[0]是关键词(至于词,长度是n对吧?)。当您进行密钥扩展时,我们将 i0 迭代到 T-2,其中 T 是整数(例如 34)。但是我得到一个 IndexOutofBoundsException,因为带有 l 的数组只有 m-2 个位置而不是 T-2.

有人可以阐明键扩展的作用和作用吗?

啊,我明白了困惑所在:

l[m-2],...l[0], k[0]

这些是输入的关键词,换句话说,它们代表关键。这些是不是数组大小的声明,如果您是开发人员,您可能会期望如此。

然后 应该导出数组 k 中的子项,使用数组 l 作为中间值。

根据公式,取最大的 i,即 i_max = T - 2 得到 i_max + m - 1 = T - 2 + m - 1 = T + m - 3 数组 l 的最高索引,因此数组的大小还有一个:T + m - 2。从零开始的数组的大小始终是最后一个元素的索引 - 毕竟加一。

类似地,对于子键数组k,您得到最高索引i_max + 1,即T - 2 + 1T - 1。同样,数组的大小又增加了一个,所以 k 中有 T 个元素。如果您需要 T 圆键,这很有意义 :)

请注意,如果您需要最少的 RAM,似乎可以简单地重做每一轮的子密钥派生。整个 l 数组似乎也没有必要。对于一个无关紧要的软件实现,当然。