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);
}
문제의 원인을 정확히 설명해주세요. – user3553031
데이터를 재구성하려고 할 때, 4 바이트를 두 번 읽고 "긴 문자로 변환"을 적용하십시오. message_left와 Message_right는 쓰기 전에 원래 값과 같지 않습니다. – mill