학교 일의 일부로 DES (EBC 포함)를 구현 중입니다. 부울 배열을 bool[64]
에서 <stdbool.h>
까지 사용하고 있습니다. 배열은 각 비트마다 1 바이트를 사용합니다. 64 바이트 대신 memcpy를 시도했을 때 64 바이트 대신 8 바이트를 시도했을 때 어려운 방법이라고 배웠습니다. 어쨌든, 어떻게 비트 배열로 fread하려면? 지금, 나는 서명되지 않은 long으로 읽고 그것을 변환하고있다. 아래처럼 :C에서 bool 배열로 이진 파일 읽기
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;
}
있습니까?
DES는 64 비트 블록 암호이므로 char보다 더 좋을 것입니다. 그러나 bool 배열에서 작업을 구현하는 것이 더 쉽습니다. – avmohan
8 문자 대신 8 바이트 길이를 사용할 수도 있습니다. 사실, bool 배열에서는 fread binary 1/0을 사용할 수 없습니다. – deviantfan
나는 나의 코멘트를 되 찾는다. char [1]은 1 바이트이지만 길이가 항상 8 바이트는 아니기 때문에 char [8]가 더 좋습니다. – avmohan