#include #include #define PROG "skey" static int size(FILE *fp) { int i; fseek(fp, 0, SEEK_END); i = ftell(fp); rewind(fp); return i; } int main(int argc, char *argv[]) { int i, j; unsigned char *buf; FILE *fp; argv[0] = argv[0][0] == '\0' ? PROG : argv[0]; if (argc < 3) { fprintf(stderr, "usage: %s key file\n", argv[0]); return EXIT_FAILURE; } if ((fp = fopen(argv[2], "rb")) == NULL) { fprintf(stderr, "%s: couldn't open file\n", argv[0]); return EXIT_FAILURE; } if ((buf = malloc(size(fp)+1)) == NULL) { fprintf(stderr, "%s: malloc failed\n", argv[0]); return EXIT_FAILURE; } fread(buf, 1, size(fp), fp); for (i = j = 0; i < size(fp); i++, j++) { j *= argv[1][j] != '\0'; putchar(buf[i] ^ argv[1][j]); } return 0; }