#c #aes
#c #aes
Вопрос:
Если я не ошибаюсь, для AES128 мы генерируем 16 байт данных, следовательно, код для него показан ниже.
void KeyExpansion(unsigned char inputKey[16], unsigned char expandedKeys[176])
{
for(int i=0; i<16; i )
expandedKeys[i] = inputKey[i];
int bytesGenerated = 16;
int rconIteration = 1;
unsigned char temp[4];
while(bytesGenerated <176)
{
for(int i=0; i<4; i )
temp[i] = expandedKeys[i bytesGenerated - 4];
if(bytesGenerated % 16 == 0)
{
keyExpansionCore(temp, rconIteration);
rconIteration ;
}
for(unsigned char a=0; a<4; a )
{
expandedKeys[bytesGenerated] = expandedKeys[bytesGenerated - 16] ^ temp[a];
bytesGenerated ;
}
}
}
Однако, я не слишком уверен в AES256. Мы также генерируем 16 байт данных или 32 байта данных? Если он генерирует 32 байта данных, я должен вместо этого изменить свой inputKey [16] на inputKey [32]? А как насчет расширенного ключа? Я был смущен, когда увидел expandedKey[176] с inputKey[16], разве это не становится 192 байтами? (Но я видел этот код при поиске AES128.)
Ответ №1:
Отличается размер ключа, а не размер блока (который всегда равен 16 байтам). Размер ключа в AES может составлять 128, 192 или 256 бит. Больше информации, а также смотрите этот и этот ответ StackExchange.