argcv

codes and stuff

Criptografia simples

leave a comment »

Este código-fonte é de um programa que fiz que lê um arquivo de texto do computador e inverte os bits de cada caractere encontrado. Para usá-lo, na chamada do programa o usuário deve especificar o nome e a extensão do arquivo (ou o endereço completo, caso ele não esteja na mesma pasta do programa). Por exemplo:

$ ./cripto texto.txt

Com isso, o programa armazenará a string no banco de strings e o argumento char *argv[] de main() terá um ponteiro apontando para o nome do arquivo.

Depois de o programa ter criptografado o arquivo, para reaver o conteúdo original basta utilizar o programa novamente, agora sobre o arquivo criptografado. Assim, os bits de cada caractere serão novamente invertidos, voltando para a sua condição inicial.

/*********************************
   Autor: Renato R. Leme
   e-mail: rntreisleme@gmail.com
***********************************/

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

inline void encrypt(char *ch); // função responsável pela inversão dos bits

int main (int argc, char *argv[]) {
    FILE *text, *temp;
    char ch;

    if (argc != 2) {
        printf("Digite o nome do arquivo.");
        exit(1);
    }

    if (!(text = fopen(argv[1], "r+"))) { // 'text' aponta para o arquivo que será lido
        printf("Erro na abertura do arquivo.\n");
        exit(1);
    }

    if (!(temp = tmpfile())) { // cria arquivo para armazenar as alterações temporariamente
        printf("Erro na criação do arquivo.\n");
        exit(1);
    }

    do {
        ch = getc(text);
        encrypt(&ch); // envia o endereço de cada caractere lido para encrypt
        if ((!feof(text))) putc(ch, temp); // coloca o caractere invertido em temp
    } while (!feof(text));

    rewind(text); // aponta o cursor de 'text' para o início do arquivo
    rewind(temp); // aponta o cursor de 'temp' para o início do arquivo

    do {
        ch = getc(temp);
        if ((!feof(temp))) putc(ch, text);
    } while (!feof(temp));


    fclose(text);
    fclose(temp);

    return 0;
}

inline void encrypt(char *ch) {
    *ch = ~(*ch);
}
Anúncios

Written by rntreis

abril 13, 2012 às 5:20 pm

Publicado em C, programação

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: