行移位變換完成基于行的循環移位操作,變換方法為:第0行不變,第1行循環左移1個位元組,第2行循環左移兩個位元組,第3行循環左移3個位元組。如下圖所示。
附上自己敲的C語言源碼:
#include <iostream>
using namespace std;
void PrintfMatrix(unsigned char m[4][4]) //該函數是輸出數組方法
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
printf("%2x",m[i][j]);
if(j%4==3)
puts("");
}
}
}
void ShiftRow(unsigned char state[4][4]) //行移位變換函數
{
unsigned char st[4];
int i,j;
for(i=1;i<4;i++)
{
for(j=0;j<4;j++)
{
st[j]=state[i][(j+i)%4];
}
for(j=0;j<4;j++)
{
state[i][j]=st[j];
}
}
}
int main()
{
unsigned char state[4][4]={
0,4,8,12,
1,5,9,13,
2,6,10,14,
3,7,11,15,
};
printf("明文為:\n");PrintfMatrix(state);
ShiftRow(state); //調用行移位函數
printf("移位後:\n");
PrintfMatrix(state);
return 0;
}
程式運作結果如下: