私はAESを反転してミックスカラム演算を行い、GF(256)で14を乗算する必要があります。これは私が(pは結果とq 14で乗算する数である)が出ているものです:GFでの乗算(256)
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
int main()
{
uint8_t p=1, q=0x02;
p = (q<<1)^(q<<2)^(q<<3);//*(x³+x²+x)
//modulo x⁸+x⁴+x³+x+1
if((q>>5)<5&&(q>>5)!=0&&(q>>5)!=3)
p^=0x1B;
if((q>>5)>1&&(q>>5)<6)
p^=0x36;
if((q>>5)>3)
p^=0x6C;
printf("\n\n\t%2.2X\n\n",p);
return 0;
}
それは動作しますが、私はこれを行うための簡単な方法があると思いますが、私はそれを見つけるように見えることはできません。私の主な問題は、私は6つの比較をすることです。
'//モジュロ'?しかし、14で乗算することは簡単です、14 = 8 + 4 + 2、従ってp =(q << 3)+(q << 2)+(q << 1); –
GF(256)乗算を、AES標準によって指定されたx8 + x4 + x3 + x + 1の既約多項式を法とする。 –