这是今天做AES加密算法,其中一个步骤:行移位(ShiftRows).
操作内容:
第0行循环左移0位;
第1行循环左移1位;
第2行循环左移2位;
第3行循环左移3位。
代码实现:
int main(int argc, char* argv[])
{
char test[16] = {
0,1,2,3,
4,5,6,7,
8,9,10,11,
12,13,14,15 };
printf("test\r\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d,",test[4*i+j]);
}
printf("\n");
}
printf("依据行数循环左移row位\r\n");
for (int i = 1; i < 4; i++) //循环每行,仅循环后3行
{
int s = 0;
while (s < i) //依据行数循环左移row位
{
char tmp = test[4*i+0]; //获取末位数据
for (int k = 1; k < 4; k++) //前3个数据均左移1位
{
test[4*i+k-1] = test[4*i+k];
}
test[4*i+4-1] = tmp; //将第一个数据填充至本行最后的数据位上
s++;
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d,",test[4*i+j]);
}
printf("\n");
}
//释放内存
getchar();
return 0;
}