Реализация Speck шифра - PullRequest
       12

Реализация Speck шифра

1 голос
/ 08 января 2020

Я пытаюсь реализовать спек-шифр, как указано здесь: Спек-шифр . На странице 18 документа вы можете найти спек-псевдокод, который я хочу реализовать.

Кажется, у меня возникла проблема с пониманием псевдокода. Как вы можете найти, x и y - это текстовые слова длиной n. l[m-2],...l[0], k[0] являются ключевыми словами (что касается слов, они имеют длину n верно?). Когда вы выполняете расширение ключа, мы выполняем итерацию для i от 0 до T-2, где T - круглые числа (например, 34). Однако я получаю IndexOutofBoundsException, потому что массив с l имеет только m-2 позиций, а не T-2.

Может кто-нибудь уточнить, что делает расширение ключа и как?

1 Ответ

2 голосов
/ 08 января 2020

Ах, я понял, в чем путаница:

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

это ключевые слова input , другими словами, они представляют ключ . Это не декларации размера массивов, как можно ожидать, если вы разработчик.

Тогда подраздел в массиве k должен быть производный, используя массив l для промежуточных значений.

В соответствии с формулами, принимая самое большое i, то есть i_max = T - 2, вы получите самый высокий индекс для массива l из i_max + m - 1 = T - 2 + m - 1 = T + m - 3 и, следовательно, Размер массива еще один: T + m - 2. Размер массива, начинающегося с нуля, всегда равен индексу последнего элемента - плюс один, в конце концов.

Аналогично, для массива подключей k вы получите самый высокий индекс i_max + 1, который равен T - 2 + 1 или T - 1. Опять же, размер массива еще один, поэтому в k есть T элементов. Это имеет большой смысл, если вам требуются T ключи раунда:)

Обратите внимание, что кажется возможным просто повторить вывод подраздела для каждого раунда, если вам требуется минимум оперативной памяти. Весь массив l тоже не кажется необходимым. Для программных реализаций, которые не имеют значения ни на йоту, конечно.

...