我正在编码AES Invert mixcolumns操作,我需要在GF(256)中将数字乘以14。这是我想出了(p是结果和Q 14乘以数量):在GF(256)中乘以14
#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次比较。
我不明白的比较的需要,但有更多的比你问,因为它包含了注释的代码'// modulo'?但乘以14很简单,14 = 8 + 4 + 2,所以'p =(q << 3)+(q << 2)+(q << 1);' –
GF(256)如AES标准所规定的那样,减少乘法模不可约多项式,该不可约多项式是x 7 + x 4 + x 3 + x + 1。 –