0
我實現DES(與EBC)作爲學校工作的一部分。我使用布爾數組bool[64]
從<stdbool.h>
該塊。該陣列使用對每個比特1個字節(I瞭解到這個硬盤的方式,當我試圖爲64bits的= 8個的memcpy字節而不是64個字節)。無論如何,如何進入位陣列?現在,我正在閱讀一個未簽名的long並將其轉換。如下圖所示:讀二進制文件轉換成布爾數組用C
unsigned long buf;
bool I[64], O[64];
int ctr = 0;
while((ctr = fread(&buf, 1, 8, fin))>0) {
dectobin(buf, I);
encrypt(I, O);
buf=bintodec(O);
fwrite(&buf, 8, 1, fout);
buf = 0;
}
的功能有:
void dectobin(unsigned long dec, bool bin[64])
{
int i;
for(i = 0; i< 64; i++)
bin[i] = (dec>>(63-i)) & 1;
}
unsigned long bintodec(bool bin[64])
{
unsigned long dec = 0;
int i;
for(i = 0; i < 64; i++) {
dec <<= 1;
dec |= (int)(bin[i]);
}
return dec;
}
有沒有更好的方式來做到這一點?
long會比char更好,因爲DES是64位塊密碼。但是在bool數組中實現操作更容易。 – avmohan
你也可以乘坐8字節長,而不是8個char's。但事實是,你不能在bool數組中使用二進制1/0。 – deviantfan
我收回我的意見。炭[8]是更好,因爲焦炭是已知的1個字節長的,但並不總是8個字節。 – avmohan