2014-07-10 7 views
0

이진 파일을 읽고 64 비트 암호화 논리를 작동하고 반환 된 파일을 이진 파일로 저장하려고합니다. 암호화가 정수의 4 바이트의 2 블록에서 작동하기 때문에 파일을 두 번 읽고 long int로 변환합니다. 그러나 동일한 프로세스를 사용하여 암호 해독을 시도했을 때 암호화 출력에서 ​​저장 한 내용이 잘못되었음을 알았습니다. 지금까지 제 코드가 있습니다.이진 파일의 내용을 부호없는 long으로 읽고 다른 이진 파일로 업데이트하고 저장하십시오.

 while (fread(buffer, 1, 4, src) == 4) { 
    //convert char to long 
    message_left = buffer[3] | (unsigned long) (buffer[2] << 8) | (unsigned long) (buffer[1] << 16) | (unsigned long)(buffer[0] << 24); 
    fread(buffer, 1, 4, src); 
    //convert char to long 
    message_right = buffer[3] | (unsigned long) (buffer[2] << 8) | (unsigned long) (buffer[1] << 16) | (unsigned long)(buffer[0] << 24); 
    //encrypt 
    Encrypt(ctx,&message_left,&message_right); 
    //convert back to char and save 
    buffer[3] = (unsigned char)message_left; 
    buffer[2] = (unsigned char)(message_left >> 8); 
    buffer[1] = (unsigned char)(message_left >> 16); 
    buffer[0] = (unsigned char)(message_left >> 24); 
    fwrite(buffer,4,1,dest); 
    buffer[3] = message_rigt; 
    buffer[2] = (unsigned char)(message_right >> 8); 
    buffer[1] = (unsigned char)(message_right >> 16); 
    buffer[0] = (unsigned char)(message_right >> 24); 
    fwrite(buffer,4,1,dest); 
    } 
+0

문제의 원인을 정확히 설명해주세요. – user3553031

+0

데이터를 재구성하려고 할 때, 4 바이트를 두 번 읽고 "긴 문자로 변환"을 적용하십시오. message_left와 Message_right는 쓰기 전에 원래 값과 같지 않습니다. – mill

답변

0

이 작품은 마음에 드시나요?

unsigned long n[2]; 
while (fread(n, sizeof(n), 1, src) == 1) { 
    Encrypt(ctx, &n[0], &n[1]); 
    fwrite(n, sizeof(n), 1, dest); 
}