我在C中實現高級加密標準(AES)。在subBytes()步驟期間,我在從char轉換爲二進制時遇到了一些問題。在C中實現AES時的奇怪行爲(將char轉換爲bin)
隨着代碼:
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
所以,你可以看到,一些值遠從字符轉換爲二進制,但其他人不。例如,值67轉換爲01000010(66)。 我看到的唯一模式是奇數在二進制數中轉換。
任何人都可以發現我做錯了什麼嗎?
我希望這是強制t爲樂趣。請不要在生產中使用自行實施的加密。有經過認證的實現已經正確實施。 –
我正要說同樣的話。 [OpenSSL](http://www.openssl.org/)是現成的加密庫的流行選擇。 – Thomas
是的,我知道..只是爲了好玩(:: – gpestana