我目前正在用c编写AES实现,我在计算MixColumn的反函数时遇到了问题。我的函数是递归的,因为在确定如何对09,0E,0D和0B mod x ^ 4 + 1进行乘法和加法时最有意义。
unsigned char multiplyByte(unsigned char c, unsigned char f){
unsigned char result = 0;
if(f==1){
return c;
}else if(f==2){
return = c << 1;
}else if(f & 1){
return multiplyByte(((c << 1) ^ c) ^ ((c & 0x80) >> 7 ? 0x1b : 0x00), f/2);
}else{
return multiplyByte((c << 1) ^ ((c & 0x80) >> 7 ? 0x1b : 0x00), f/2);
}
return result;
}
c是乘以的字节,f是因子。
我试图在纸上理解这一点,其中c值为0x47,f为0x0E。使用答案here和表格here。如果我在纸上解决这个问题,我会得到......
0x47 x 0x0E:
<(>(((((X x 2)+ X)x 2)+ X)x 2)如果添加只是XOR,那么这应该相当于..
0x47 x 0x03 =(0x47&lt;&lt; 1 XOR 47)= 0xC9
所以,
(((0xC9 x 2)+ 0xC9)x 2)= 0x47 x 0x0E =
(0x40)x 2 = 0x80。
但是,根据第二个链接中的表格,我期待0x87。