Я иду, короче говоря. Это было некоторое время, что я хочу реализовать свое собственное Шифрование AES / программа дешифрования. Программа шифрования подходила и шифрующий без любой ошибки или странного вывода (Так как я сравнил вывод своей программы с рабочим коммерческим, и результатом было то же).
Википедия была мое руководство в этой реализации, в рамках которой я считал "Ряд обратных раундов, применяются для преобразования шифрованного текста назад в исходный простой текст с помощью того же ключа шифрования".
Существует несколько модулей, которые я реализовал:
Я также реализовал несколько обратных реализаций вышеупомянутых модулей:
Примечание: Я не реализовал обратный круглый ключ с тех пор, Это - луг 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);
Таким образом, вот вопрос: что не так? ||, какова корректная последовательность применения этих так называемых модулей или функций, если Вы будете?
Ваш порядок действий неверен. Думаю, вам нужно следующее:
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 для производственного использования.