Итак, мы все согласны, что ключи имеют фиксированную длину 128 бит или 192 бит или 256 бит. Если наш контекст составлял 50 символов (байты)% 16 = 2 байта. Таким образом, мы шифруем контекст в 3 раза, а оставшиеся два байта, как они будут храниться в государственном блоке. Должен ли я использовать их, в стандарте не указывается, как обрабатывать такие условия.Ограничения AES и MixColumns
Этап MixColumns является самым сложным аспектом в AES, однако я не смог понять математическое представление. У меня есть понимание матричного умножения, но я удивлен математическими результатами. Умножая значение на 2, сдвиг влево для маленькой конечной позиции 1 и сдвиг вправо для большого конца. Если бы у нас был самый старший бит, который был установлен как 1 (0x80), тогда мы должны XOR сдвинутый результат с 0x1B. Я думал, что умножив на 3, это означало бы сдвинуть значение 2 позиции.
Я проверил различные источники в Википедии, даже в учебнике, посвященном реализации C. Но меня больше интересует полная реализация! Благодарим вас за любой возможный вклад.
Вам нужно умножить или разделить на 4, чтобы сдвинуть на два бита. –
AES - это только блок-шифр. Если вы хотите зашифровать фактические данные, вам нужно выбрать подходящий _mode_, например CBC (цепочка блоков шифрования) или CTR (режим счетчика). CBC - это блочный режим, поэтому вам нужно придумать подходящий способ заполнения (это зависит от вас); CTR - это режим потока, поэтому вы можете шифровать любое количество байтов. –