Speck密码的实现
Implementation of Speck cipher
我正在尝试实现此处指定的 speck 密码:Speck Cipher。在文档的第 18 页上,您可以找到我想要实现的一些伪代码。
看来我对伪代码的理解有问题。你可以在那里找到,x
和 y
是长度为 n
的明文单词。 l[m-2],...l[0]
、k[0]
是关键词(至于词,长度是n
对吧?)。当您进行密钥扩展时,我们将 i
从 0
迭代到 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 + 1
或T - 1
。同样,数组的大小又增加了一个,所以 k
中有 T
个元素。如果您需要 T
圆键,这很有意义 :)
请注意,如果您需要最少的 RAM,似乎可以简单地重做每一轮的子密钥派生。整个 l
数组似乎也没有必要。对于一个无关紧要的软件实现,当然。
我正在尝试实现此处指定的 speck 密码:Speck Cipher。在文档的第 18 页上,您可以找到我想要实现的一些伪代码。
看来我对伪代码的理解有问题。你可以在那里找到,x
和 y
是长度为 n
的明文单词。 l[m-2],...l[0]
、k[0]
是关键词(至于词,长度是n
对吧?)。当您进行密钥扩展时,我们将 i
从 0
迭代到 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 + 1
或T - 1
。同样,数组的大小又增加了一个,所以 k
中有 T
个元素。如果您需要 T
圆键,这很有意义 :)
请注意,如果您需要最少的 RAM,似乎可以简单地重做每一轮的子密钥派生。整个 l
数组似乎也没有必要。对于一个无关紧要的软件实现,当然。