我在 C 中实现高级加密标准 (AES)。在 subBytes() 步骤中,我在从 char 转换为二进制时遇到了一些问题。
使用代码:
void subBytes(unsigned char* state) {
int i=0;
for(; i<=127; i++) {
printf("%d",getBitState(state, i));
if(i%32==0){printf("\n");}
else if(i%8==0) {printf(",");}
}
printf("\n");
}
int getBitState(unsigned char* state, int i) {
int bytePosition = i/8;
int bitPosition = i%8;
unsigned char byteValue = state[bytePosition];
return (byteValue >> (8-bitPosition)) & 1;
}
如果状态矩阵是:
50, 67, 246, 168,
136, 90, 48, 141,
49, 49, 152, 162,
224, 55, 7, 52,
输出是:
00110010,01000010,11110110,10101000
10001000,01011010,00110000,10001100
00110000,00110000,10011000,10100010
11100000,00110110,00000110,0011010
因此,如您所见,一些值可以很好地从 char 转换为 binary,但其他值则没有。例如,值 67 转换为 01000010 (66)。我看到的唯一模式是奇数转换为偶数二进制数。
谁能发现我做错了什么?