Advertisement
xerpi

File xorer

Apr 15th, 2012
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4.  
  5. typedef unsigned char byte;
  6.  
  7. byte *xordata(byte *data1, byte *data2, int size);
  8. void xorfile(FILE *input, FILE *output, byte *key, int key_size);
  9. int datalength(byte *data);
  10.  
  11. int main(int argc, char **argv){
  12.     //Bad arguments
  13.         if( argc < 2){
  14.             printf("No input files.\n\nUse: xorer [file] [key file]\n");
  15.             return -1;
  16.         }else if( argc < 3){
  17.             printf("No  key file introduced.\n\nUse: xorer [file] [key file]\n");
  18.             return -1;
  19.         }
  20.     //Open the files
  21.         FILE *input;
  22.         FILE *output;
  23.         FILE *file_key;
  24.  
  25.         printf("\nInput file: %s\n\nKey file: %s", argv[1], argv[2]);
  26.  
  27.         input    = fopen(argv[1], "rb");
  28.         file_key = fopen(argv[2], "rb");
  29.         output   = fopen("output.bin", "wb");
  30.     //Get the key and calculate its size
  31.         fseek(file_key, 0, SEEK_END);
  32.         int key_size = ftell(file_key);
  33.  
  34.         fseek(file_key, 0, SEEK_SET);
  35.         byte *key = (byte *)malloc(key_size);
  36.         fread(key, 1, key_size, file_key);
  37.  
  38.         printf("\n\nThe key is %i byte(s) long", key_size);
  39.     //Algorithm
  40.         xorfile(input, output, key, key_size);
  41.  
  42.  
  43.     fclose(input);
  44.     fclose(output);
  45.     return 0;
  46. }
  47.  
  48.  
  49. byte *xordata(byte *data1, byte *data2, int size){
  50.     int i;
  51.     byte *out = (byte *)malloc(size);
  52.     for(i = 0; i<size; i++){
  53.         out[i] = data1[i] ^ data2[i];
  54.     }
  55.     return out;
  56. }
  57.  
  58. void xorfile(FILE *input, FILE *output, byte *key, int key_size){
  59.     int i, steps, input_file_size;
  60.     byte *buffer = (byte *)malloc(key_size);
  61.     byte *out    = (byte *)malloc(key_size);
  62.     //Calculate input file size
  63.         fseek(input, 0, SEEK_END);
  64.         input_file_size = ftell(input);
  65.         fseek(input, 0, SEEK_SET);
  66.     //Calculate steps
  67.         steps = (input_file_size/key_size);
  68.         printf("\n\nThe input file is %i bytes(s) long, so I have to do %i step(s) for xoring the file.\n\nxoring file, please wait...", input_file_size, steps);
  69.     //Algorithm!
  70.         for(i = 0; i< steps; i++){
  71.             fread(buffer, 1, key_size, input);
  72.             out = xordata(buffer, key, key_size);
  73.             fwrite(out, 1, key_size, output);
  74.         }
  75.         printf("\n\nFile xored succesfully!!\n");
  76. }
  77.  
  78. int datalength(byte *data){
  79.     int length = 0;
  80.     while(*data++)
  81.         length++;
  82.     return length;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement