AES加密过程中的列混合操作中,需要用到GF(2的8次方)上的域元素的乘,已经写成了方法
相关代码如下:
public int Multi(int a,int b) 
   {
           int[]  temp = new int[8];
   int[]  flag = new int[8];
   int c = b;
   for(int i= 0;i < 8;i++)
   {
        int c1,c2;
        c1 = c / 2;
        c2 = c % 2;
                if(c2 == 1)
                 flag[i] = 1;
                else 
                 flag[i] = 0;
                    c = c1;
                if(i==0)
                 temp[i] = a;
                else{
                    temp[i] = temp[i-1]*2;
                if(temp[i]>255)
                    temp[i] = (temp[i]%256)^27;                    
                }
           }
           a = 0;
           for(int i = 0; i < 8; i++)
               a = a^(temp[i]*flag[i]);
           return a;
  }
此方法的目标就是实现a与b的域乘。
a和b都是十进制数,最后返回的a是a与b域乘的结果。
域乘的相关数学知识如下链接
http://wenku.baidu.com/view/feda71bd960590c69ec376fd.html
希望有懂这方面的前辈指点一下这个方法是如何实现这个功能的。解释这段代码的算法
最好在代码上添上通俗易懂的注释,谢谢!

解决方案 »

  1.   


    AES 算列混合时生成元为03的反对数表的作用是什么??请教大神!!谢谢指教
    private static int[] inLogTable =
     {    
           1,3,5,15,17,51,85,255,26,46,114,150,161,248,19,53,
           95,225,56,72,216,115,149,164,247,2,6,10,30,34,102,170,
       229,52,92,228,55,89,235,38,106,190,217,112,144,171,230,49,
       83,245,4,12,20,60,68,204,79,209,104,184,211,110,178,205,
       76,212,103,169,224,59,77,215,98,166,241,8,24,40,120,136,
       131,158,185,208,107,189,220,127,129,152,179,206,73,219,118,154,
       181,196,87,249,16,48,80,240,11,29,39,105,187,214,97,163,
       254,25,43,125,135,146,173,236,47,113,147,174,233,32,96,160,
                   251,22,58,78,210,109,183,194,93,231,50,86,250,21,63,65,
       195,94,226,61,71,201,64,192,91,237,44,116,156,191,218,117,
       159,186,213,100,172,239,42,126,130,157,188,223,122,142,137,128,
       155,182,193,88,232,35,101,175,234,37,111,177,200,67,197,84 ,
                   252,31,33,99,165,244,7,9,27,45,119,153,176,203,70,202,
                   69,207,74,222,121,139,134,145,168,227,62,66,198,81,243,14,
                   18,54,90,238,41,123,141,140,143,138,133,148,167,242,13,23,
                   57,75,221,124,132,151,162,253,28,36,108,180,199,82,246,1
               };