我正在尝试实现这里指定的speck密码:斑点密码。在文档的第18页,您可以找到一些我想实现的小伪代码。
看来我在理解伪码方面遇到了问题。如您所见,x和y是长度为n的明文单词。l[m-2],...l[0],k[0]是关键词(对于单词,它们有长度n,对吗?)在进行键扩展时,我们将i从0迭代到T-2,其中T是整数(例如34)。但是,我得到了一个IndexOutofBoundsException,因为带有l的数组只有m-2位置,而没有T-2。
有人能澄清关键扩展的作用和方法吗?
发布于 2020-01-08 14:06:32
啊,我明白了困惑的所在:
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。同样,数组的大小也是一个,所以在T中有k元素。如果需要T圆键,这是很有意义的:)
请注意,如果您需要最少的RAM,那么似乎可以简单地为每一轮重做子键派生。整个l数组似乎也没有必要。当然,对于软件实现来说,这一点都不重要。
https://stackoverflow.com/questions/59641203
复制相似问题