Criptografia em XOR

By Vovô

Como a zine do motd ainda não saiu, aqui vai uma prévia de um exemplo da parte em que estou explicando IPC com signals. É um criptografador/decriptografador que usa xor e pula bytes nulos de entrada e saída (vc deve saber o porquê):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>

unsigned long total = 0;

char buffer[1024];

void finaliza(int);

FILE *in, *out;

int main(int argc, char *argv[])
{

unsigned int i;
size_t len;
char *senha;

if( argc < 4 )
{

printf(“Uso: %s SENHA ARQUIVO1 ARQUIVO2\n”, argv[0]);
printf(“Criptografa ARQUIVO1 usando SENHA e salva o “
“resultado em ARQUIVO2\n\n”);

return 0;

}

senha = argv[1];

if( strlen(senha) == 0 )
{

fprintf(stderr, “A senha deve conter pelo menos uma letra “
“ou dígito\n”);
return -1;

}

in = fopen(argv[2], “r”);

if( ! in )
{

perror(“Erro ao abrir arquivo de origem”);

return -1;

}

out = fopen(argv[3], “w+”);

if( ! out )
{

perror(“Erro ao abrir/criar arquivo criptografado”);

fclose(in);

return -1;

}

signal(SIGINT, finaliza);
signal(SIGTERM, finaliza);

while( ! feof(in) )
{

len = fread(buffer, 1, 1024, in);

for(i = 0;i < len;i++)
{

if( buffer[i] && buffer[i] ^ senha[i % strlen(senha)] )
buffer[i] ^= senha[i % strlen(senha)];

}

fwrite(buffer, 1, len, out);

total ++;

}

fclose(in);
fclose(out);

printf(“Criptografia finalizada com sucesso (%u KB “
“criptografados)\n”, total);

return 0;

}

void finaliza(int regs)
{

printf(“Criptografia cancelada em %u KB!\n”, total);

exit(0);

}

Deixe uma resposta