分组密码SAFER+的C#实现
2009-02-27 08:18:34 来源:WEB开发网然后进行32轮迭代,首论迭代从高位m_nRoundsLen-1开始以后依次递减1,直到为0。在第i论迭代中,先将input数组右乘矩阵m_nAntiLinearTransMatrixBox(该矩阵的说明详见参考文献[1]),代码如下:
temp = input[6];
input[6] = input[30];
input[30] = temp;
......
input[2] = (byte)((input[2] - input[0]) >= 0 ? (input[2] - input[0]) : (input[2] - input[0] + 256));
其实质仍然是一维数组input[]与一个二维数组m_nAntiLinearTransMatrixBox的乘积,那么为什么不用以下更精炼的代码呢?
Byte[] temp = new byte[input.length];
For (j=0;j<16;j++)
For (k=0;k<16;k++)
{
Temp[2*j] +=(byte)(input[2*k] * m_nAntiLinearTransMatrixBox[k,j]);
}
For (j=0;j<16;j++)
{
Input[2*j] = (byte)temp[2*j];
}
其中:
Static public byte[,] m_nAntiLinearTransMatrixBox = newbyte[16,16]
{
{2,-2,1,-2,1,-1,4,-8,2,-4,1,-1,1,-2,1,-1},
{-4,4,-2,4,-2,2,-8,16,-2,4,-1,1,-1,2,-1,1},
{1,-2,1,-1,2,-4,1,-1,1,-1,1,-2,2,-2,4,-8},
{-2,4,-2,2,-2,4,-1,1,-1,1,-1,2,-4,4,-8,16},
{1,-1,2,-4,1,-1,1,-2,1,-2,1,-1,4,-8,2,-2},
{-1,1,-2,4,-1,1,-1,2,-2,4,-2,2,-8,16,-4,4},
{2,-4,1,-1,1,-2,1,-1,2,-2,4,-8,1,-1,1,-2},
{-2,4,-1,1,-1,2,-1,1,-4,4,-8,16,-2,2,-2,4},
{1,-1,1,-2,1,-1,2,-4,4,-8,2,-2,1,-2,1,-1},
{-1,1,-1,2,-1,1,-2,4,-8,16,-4,4,-2,4,-2,2},
{1,-2,1,-1,4,-8,2,-2,1,-1,1,-2,1,-1,2,-4},
{-1,2,-1,1,-8,16,-4,4,-2,2,-2,4,-1,1,-2,4},
{4,-8,2,-2,1,-2,1,-1,1,-2,1,-1,2,-4,1,-1},
{-8,16,-4,4,-2,4,-2,2,-1,2,-1,1,-2,4,-1,1},
{1,-1,4,-8,2,-2,1,-2,1,-1,2,-4,1,-1,1,-2},
{-2,2,-8,16,-4,4,-2,4,-1,1,-2,4,-1,1,-1,2}
}
更多精彩
赞助商链接