Я написал программу XOR на C. Цель программы - XOR-файлы, я тестировал эту программу на Linux, так как она является моей основной ОС, и она отлично работала с «.exe» (я использовал wine для запуска exe на Linux). Однако, когда программа была протестирована на Windows, я заметил, что теряю байты данных, когда я XORed файл, и я не знаю, почему, если кто-то может пролить свет на ситуацию, это будет очень полезно. Ниже я разместил код в моей программе XOR.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
//XOR key
#define XOR_KEY 0x6F
void XORFile(char *infile, char *outfile)
{
FILE *fp;
FILE *fp2;
int rlen;
char buf[4096];
fp = fopen(infile, "r");
fp2 = fopen(outfile, "w");
while (1) {
rlen = fread(buf,1,sizeof(buf),fp);
if (rlen <= 0)
break;
// XOR read file buffer
for (int i = 0; i < rlen; ++i)
buf[i] ^= XOR_KEY;
fwrite(buf,1,rlen,fp2);
}
fclose(fp);
fclose(fp2);
}
int main (int argc, char *argv[]) {
if(argc <= 3){
fprintf (stderr, "Usage: %s [CRYPT] [IN FILE] [OUTFILE]\n", argv[0]);
exit(1);
}
XORFile (argv[2], argv[3]);
return 0;
}