Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <malloc.h>
- typedef unsigned char byte;
- byte *xordata(byte *data1, byte *data2, int size);
- void xorfile(FILE *input, FILE *output, byte *key, int key_size);
- int datalength(byte *data);
- int main(int argc, char **argv){
- //Bad arguments
- if( argc < 2){
- printf("No input files.\n\nUse: xorer [file] [key file]\n");
- return -1;
- }else if( argc < 3){
- printf("No key file introduced.\n\nUse: xorer [file] [key file]\n");
- return -1;
- }
- //Open the files
- FILE *input;
- FILE *output;
- FILE *file_key;
- printf("\nInput file: %s\n\nKey file: %s", argv[1], argv[2]);
- input = fopen(argv[1], "rb");
- file_key = fopen(argv[2], "rb");
- output = fopen("output.bin", "wb");
- //Get the key and calculate its size
- fseek(file_key, 0, SEEK_END);
- int key_size = ftell(file_key);
- fseek(file_key, 0, SEEK_SET);
- byte *key = (byte *)malloc(key_size);
- fread(key, 1, key_size, file_key);
- printf("\n\nThe key is %i byte(s) long", key_size);
- //Algorithm
- xorfile(input, output, key, key_size);
- fclose(input);
- fclose(output);
- return 0;
- }
- byte *xordata(byte *data1, byte *data2, int size){
- int i;
- byte *out = (byte *)malloc(size);
- for(i = 0; i<size; i++){
- out[i] = data1[i] ^ data2[i];
- }
- return out;
- }
- void xorfile(FILE *input, FILE *output, byte *key, int key_size){
- int i, steps, input_file_size;
- byte *buffer = (byte *)malloc(key_size);
- byte *out = (byte *)malloc(key_size);
- //Calculate input file size
- fseek(input, 0, SEEK_END);
- input_file_size = ftell(input);
- fseek(input, 0, SEEK_SET);
- //Calculate steps
- steps = (input_file_size/key_size);
- 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);
- //Algorithm!
- for(i = 0; i< steps; i++){
- fread(buffer, 1, key_size, input);
- out = xordata(buffer, key, key_size);
- fwrite(out, 1, key_size, output);
- }
- printf("\n\nFile xored succesfully!!\n");
- }
- int datalength(byte *data){
- int length = 0;
- while(*data++)
- length++;
- return length;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement