【问题标题】:Implementation of Speck cipherSpeck密码的实现
【发布时间】:2020-01-08 07:26:03
【问题描述】:

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

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

有人能解释一下关键扩展的作用和方式吗?

【问题讨论】:

  • 您是否创建了足够大小的“k”?您至少应该发布一个最少的代码以获得正确的答案。

标签: encryption implementation


【解决方案1】:

啊,我明白了困惑所在:

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 数组似乎也没有必要。当然,对于一点都不重要的软​​件实现。

【讨论】:

  • 非常感谢,这对我帮助很大! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2021-03-01
  • 2020-11-22
  • 1970-01-01
相关资源
最近更新 更多