我正在尝试实现移位行功能(AES加密),我编写了以下函数,但是与位置2、3、3、2和3、3对应的数组元素没有得到正确的交换。请看一下并提出建议。。。
预期产量http://en.wikipedia.org/wiki/File:AES-ShiftRows.svg
void shiftRow(unsigned char **state){
int i,j,n; unsigned char *temp;
temp =(unsigned char *)malloc(sizeof(unsigned char));
for(i=1;i<4;i++){
*temp =state[i][0];
printf("\t%x",*temp);
for(j=0;j<4;j++){
n = ((i+j)>3?(i+j)-4:i+j);
state[i][j]=state[i][n];
}
printf("\t%x\n",*temp);
state[i][j-i]=*temp;
}
}
最佳答案
我不得不做的一些变通,不是完美的解决方案,但做了工作。。。
void shiftRow(unsigned char **state){
int i,j,n; unsigned char temp;
// temp =(unsigned char *)malloc(sizeof(unsigned char));
for(i=1;i<2;i++){
temp =state[i][0];
//printf("\t%x",temp);
for(j=0;j<4;j++){
n = ((i+j)>3?(i+j)-4:i+j);
state[i][j]=state[i][n];
}
printf("\t%x\n",temp);
state[i][j-i]=temp;
}
temp =state[2][0];
state[2][0]=state[2][2];
state[2][2]=temp;
temp =state[2][1];
state[2][1]=state[2][3];
state[2][3]=temp;
temp =state[3][0];
state[3][0]=state[3][3];
state[3][3]=state[3][2];
state[3][2]=state[3][1];
state[3][1]=temp;
} //shiftrow ends
如有任何其他解决方案/方法,将不胜感激