В алгоритме AES есть функция, чтобы умножить байт на 2 в поле Галуа.Эти две функции одинаковы?
Это функция, заданная на сайте
private static byte gfmultby02(byte b)
{
if (b < 0x80)
return (byte)(int)(b <<1);
else
return (byte)((int)(b << 1)^(int)(0x1b));
}
Это функция я написал.
private static byte MulGF2(byte x)
{
if (x < 0x80)
return (byte)(x << 1);
else
{
return (byte)((x << 1)^0x1b);
}
}
Что мне нужно знать, учитывая любой байт, будет ли это выполняться таким же образом. На самом деле меня беспокоит дополнительное приведение к int, а затем снова к байту. Пока что я тестировал, и все выглядит нормально. Добавляет ли лишний прилив к int, а затем к байту, в редких случаях?
Разве что big-endian/little-endian не имеет значения? –
@ Dan McG: Нет, это все в прямых вычислениях, даже на байтовых размерах. Никакие проблемы с контентом не должны влиять на результаты здесь. – unwind
Действительно, я просто бросил его на Solaris/Sparc и Linux/Intel с C++, и он вел себя точно так же. –