@kuzia_bRatok
Студент

Почему в Rijndael присутствует сравнение с 0x80?

Код метода части шифрования привожу ниже:
private static byte gfmultby02(byte b) 
{ 
if (b < 0x80) 
return (byte)(int)(b « 1); 
else 
return (byte)((int)(b « 1) ^ (int)(0x1b)); 
}
  • Вопрос задан
  • 383 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
Потому что gfmultby02 - это функция умножения на два в поле Галуа 2^8. Если вчитаться в статью и поразмыслить, то байт, который больше или равен 0х80, будет представлен в виде "х^7 + ..." - тут важен только x^7, a байт, меньше 0х80 будет представлен полиномом максимум шестой степени, т.е. х^6 + ...
Далее, 2 (то, на что умножаем) - это х^1 + х^0 = х.
Дальше, просто умножаем полином на х. Видно, что если байт был меньше 0х80, то получится максимум полином x^7 + ..., он входит в используемое поле. Реализует это сдвиг влево.
Втора ветка кода реализует поведение, когда результат не входит в наше поле. XOR 0х1b, видимо, как-то связан с конкретным порождающим полиномом 100011011, тут не разбирался. Может быть, Mrrl подскажет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы