Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* by xerpi (c) 2013 */
- #include <stdio.h>
- #include <stdlib.h>
- typedef unsigned char byte;
- void print_usage();
- int xorer(char* filename_input, char *key_file, char* filename_output);
- int xordata(byte *input, byte* key, byte* output, unsigned int size);
- int main(int argc, char *argv[])
- {
- if(argc < 3) {
- print_usage();
- } else if(argc == 3) {
- if(!xorer(argv[1], argv[2], "xored.bin")) printf("error\n");
- } else {
- if(!xorer(argv[1], argv[2], argv[3])) printf("error\n");
- }
- return 0;
- }
- void print_usage()
- {
- printf("usage: xorer file keyfile [output]\n");
- }
- int xorer(char* filename_input, char *key_file, char* filename_output)
- {
- byte *input_buf, *output_buf, *key_buf;
- FILE *finput, *fkey, *foutput;
- int input_readed, key_readed, steps, key_len, input_len, i;
- if(!(finput = fopen(filename_input, "rb"))) return 0;
- if(!(fkey = fopen(key_file, "rb"))) return 0;
- if(!(foutput = fopen(filename_output, "wb"))) return 0;
- //Get key length
- fseek(fkey, 0, SEEK_END);
- key_len = ftell(fkey);
- fseek(fkey, 0, SEEK_SET);
- //Get input file length
- fseek(finput, 0, SEEK_END);
- input_len = ftell(finput);
- fseek(finput, 0, SEEK_SET);
- //Calculate number of for cycles to do
- steps = (int)(input_len/key_len);
- if(input_len%key_len) steps++;
- //Allocate buffers
- key_buf = (byte *)malloc(key_len * sizeof(byte));
- input_buf = (byte *)malloc(key_len * sizeof(byte));
- output_buf = (byte *)malloc(key_len * sizeof(byte));
- //Read key
- key_readed = fread(key_buf, 1, key_len, fkey);
- //XOR data
- for(i = 0; i < steps; i++) {
- input_readed = fread(input_buf, 1, key_len, finput);
- xordata(input_buf, key_buf, output_buf, input_readed);
- fwrite(output_buf, 1, input_readed, foutput);
- }
- fclose(finput);
- fclose(fkey);
- fflush(foutput);
- fclose(foutput);
- free(key_buf);
- free(input_buf);
- free(output_buf);
- return 1;
- }
- int xordata(byte *input, byte* key, byte* output, unsigned int size)
- {
- int i;
- for(i = 0; i < size; i++) {
- output[i] = input[i] ^ key[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement