行移位变换完成基于行的循环移位操作,变换方法为:第0行不变,第1行循环左移1个字节,第2行循环左移两个字节,第3行循环左移3个字节。如下图所示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM2YjMzgTNwEDNwETM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
附上自己敲的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;
}
程序运行结果如下: