Алгоритм дешифрования AES

Я иду, короче говоря. Это было некоторое время, что я хочу реализовать свое собственное Шифрование AES / программа дешифрования. Программа шифрования подходила и шифрующий без любой ошибки или странного вывода (Так как я сравнил вывод своей программы с рабочим коммерческим, и результатом было то же).

Википедия была мое руководство в этой реализации, в рамках которой я считал "Ряд обратных раундов, применяются для преобразования шифрованного текста назад в исходный простой текст с помощью того же ключа шифрования".

Существует несколько модулей, которые я реализовал:

  1. Добавьте круглый ключ
  2. Строки сдвига
  3. Байты Sub
  4. Столбец соединения

Я также реализовал несколько обратных реализаций вышеупомянутых модулей:

  1. Обратные строки сдвига
  2. Инвертируйте байт Sub
  3. Обратный столбец соединения

Примечание: Я не реализовал обратный круглый ключ с тех пор, Это - луг XOR простой текст с ключом шифрования, и реверс XOR является самим XOR (исправьте меня, если я неправ),

Таким образом, я загнал это модули в обратном порядке, что я сделал шифрование, но никогда я не возвращал свой простой текст:

expandkey128(key);
rev_subbytes(data);  
rev_shiftrows(data);
addroundkey(data,key,10);

for(int i = 9; i>= 1; i--) { 
    rev_subbytes(data); 
    rev_shiftrows(data);
    rev_mixColum(data);
    addroundkey(data,key,i);
}

addroundkey(data,key,0);

// Please note that I also did from 0 to 10 ,
// instead of 10 to 0 and didn't workout

И также я думал, возможно, я не должен реализовывать обратную модель модулей, возможно, я должен использовать те модули, что я сделал шифрование с только в обратном порядке; хорошо угадайте что? не работал!:

expandkey128(key);
addroundkey(data,key,0);

for(int i = 1; i<= 9; i++) {
    subbytes(data); 
    shiftrows(data);
    mixColum(data);
    addroundkey(data,key,i);
}

subbytes(data);
shiftrows(data);
addroundkey(data,key,10);

Таким образом, вот вопрос: что не так? ||, какова корректная последовательность применения этих так называемых модулей или функций, если Вы будете?

10
задан In silico 9 August 2010 в 01:31
поделиться

1 ответ

Ваш порядок действий неверен. Думаю, вам нужно следующее:

expandkey128(key);

addroundkey(data,key,10);
rev_shiftrows(data);
rev_subbytes(data); 

for(int i = 9; i>= 1; i--) { 
    addroundkey(data,key,i);
    rev_mixColumn(data);
    rev_shiftrows(data);
    rev_subbytes(data); 
}

addroundkey(data,key,0);

Для получения более подробной информации см. мое объяснение AES с помощью рисунка карандашом и сопровождающую его эталонную реализацию.

ПРЕДУПРЕЖДЕНИЕ : Как упоминалось в Акте 3, Сцена 2 , , драконы должны писать свою собственную реализацию AES для производственного использования.

13
ответ дан 3 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: