XOR Arguments
Takes a file and XOR's its content with a given value. Fast C implementation.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#define XORBYTE (0x8dUL)
#define XORINT (XORBYTE | (XORBYTE << 8) | (XORBYTE << 16) | (XORBYTE << 24))
#ifdef __LP64__
#define XORLONG ((XORINT) | ((XORINT) << 32))
#define LONG2 3
#else
#define XORLONG XORINT
#define LONG2 2
#endif
#define BUFSIZE (2048 << 10)
#ifdef WIN32
#define MODE (S_IRUSR | S_IWUSR)
#else
#define MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH)
#define O_BINARY 0
#endif
int main(int argc, char *argv[])
{
unsigned long *buf;
int i, r, fin, fout;
fin = open(argv[1], O_RDONLY | O_BINARY);
fout = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, MODE);
buf = malloc((BUFSIZE >> LONG2) * sizeof(long));
while ((r = read(fin, buf, BUFSIZE)) > 0) {
for (i = 0; i < ((r + sizeof(long) - 1) >> LONG2); i++)
buf[i] ^= XORLONG;
write(fout, buf, r);
}
free(buf);
close(fout);
close(fin);
return 0;
}
@Tools