C++ Failproof xor 加解密源代码
/* All of the XOR encryption algorithms I encountered on the web were faulty on * some keys/inputs using binary read & write both for files and chars is * crucial */ #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 512 // max key length void xorenc(char *inname, char *outname, char *key); int main(int argc, char **argv) { char input[MAX], *key; if(argc != 3) // check the arguments { printf("ERROR: invalid arguments\n\n"); printf("Usage:\n"); printf("%s [input] [output]\n", argv[0]); return EXIT_FAILURE; } /* get the key */ printf("Key plz: "); fgets(input, MAX, stdin); key = malloc(strlen(input) + 1); strcpy(key, input); xorenc(argv[1], argv[2], key); free(key); return 0; } void xorenc(char *inname, char *outname, char *key) { FILE *input, *output; char c[1]; int i, k; input = fopen(inname, "rb"); output = fopen(outname, "wb"); k = strlen(key); i = 0; while((fread(c, 1, 1, input)) != 0) { c[0] ^= key[i++]; // xor the input file's char with key's char fwrite(c, 1, 1, output); // write the (en/de)crypted char to output if(i == k) i = 0; // rewind the key if input is longer than it } fclose(input); fclose(output);