Você está na página 1de 7

universidade independente!

Licenciatura

ENGENHARIA INFORMÁTICA

1º ANO

“PROGRAMA DE
ENCRIPTAÇÃO / DESENCRIPTAÇÃO”

Honorio Corte-Real – Nº 60427

José Gouveia – Nº 60418

Pedro Cardoso – Nº 60097

Rogério Simões – Nº 60426

Programação I

Janeiro / 2007
Relatório

Resumo

O Programa foi desenvolvido em linguagem C de forma a permitir a encriptação e


desencriptação de ficheiros segundo dois algoritmos diferentes. Este previlégio será
concedido através de uma password fornecida pelo utilizador.

Descrição funcional

O acesso ao programa poderá ser feito através de duas formas distintas:

Linha de comando: pela digitação de um comando, através de uma consola


DOS com os argumentos pretendidos. Na situação de desconhecimento dos
argumentos validos para o programa, basta digitar “encripa.exe -?” ;
Menu: digitando numa consola DOS “encripta.exe”.

Uma vez dentro do programa, através do menu, estarão disponíveis as opções de


encriptar ou desencriptar ficheiro, que por sua vez nos transportarão para um novo
menu de encriptação ou desencriptação.

Neste ponto, a opção poderá se feita por um dos três métodos de encriptação ou
desencriptação.

Seguidamente é feita a solicitação do ficheiro que pretendemos encriptar ou


desencriptar, bem como da password necessária para que todo o processo se
desenvolva.

Descrição técnica

O programa está dividido em duas partes distintas:

A primeira parte consiste no interface da aplicação, onde se incluem os menus


e as chamadas às funções de encriptação e desencriptação. Nesta fase, além
da definição de variaveis e funções, é também realizado todo o controlo do
fluxo da aplicação, onde se destacam os pontos de decisão baseados
essencialmente em controlos de fluxo do tipo SWITCH/CASE e IF’s.

2
Consideramos também importante salientar nesta etapa do programa a função
getopt , responsável pela leitura dos parâmetros de entrada na aplicação,
através do Command Line;
Na segunda parte da aplicação é fundamental destacar as funções de
encriptação e desecriptação que podemos considerar o core do nosso
programa.

Função “XOR”

Esta função recebe dois parâmetros: o caracter a ser encriptado e a password.

É efectuado um xor ao caracter a ser encriptado com o caracter da password A


desencriptação é realizada por um processo inverso, ou seja, é efectuado um xor com
o mesmo caracter da password..

Função “Limpar_écran”

A função “limpar écran” efectua uma chamada a uma aplicação do sistema.


Neste caso utiliza-se o comando cls.

Função “processa_ficheiros”

Esta função encarrega-se de receber os parâmetros do menu ou dos argumentos de


entrada, para efectuar as chamadas das diversas rotinas de encriptação.

A função recebe dois parâmetros: o parâmetro que dá a indicação de qual o algoritmo


a utilizar, e outro que a dá a indicação para encriptar ou desencriptar.

Esta mesma função verifica inicialmente se o ficheiro a ler existe ou não. No caso não
existir, uma mensagem de erro dá essa indicação, se existir, abre o ficheiro, efectua
toda a decisão de chamadas aos diversos algoritmos e, por fim passa um caracter ao
algoritmo, recebe outro, que por sua vez o grava num novo ficheiro.

Quando o ficheiro de origem dá a indicação que está no fim (eof - end of file), então a
função termina.

3
Função “main”

Esta função testa se são passados argumentos de entrada à aplicação. No caso da


sua existência, estes são processados, caso contrário, chama o menu principal. Nesta
situação, o programa passa os parâmetros entrados a variáveis para que o
processamento seja possível.

A recepção/teste de parâmetros é efectuada com a biblioteca <getop.h>, fornecida


pelo compilador utilizado, o dev-c++.

Função ENIGMA

A função ENIGMA recebe dois parâmetros: um caracter para encriptar e um switch


que indica à função se vai trabalhar no modo encriptação ou desencriptação. Este
primeiro parâmetro é devolvida na forma de caracter encriptado ou desencriptado,
dependendo do modo em que a função esteja a funcionar no momento.

No modo de encriptação, após o caracter entrar na função, será iniciado pelo mesmo
um percurso pelos 4 arrays fixos de inteiros desordenados que representam todo o
codigo ASCII (excepto o caracter 26=EOF), da seguinte forma:

1. A função principal lê um caracter do ficheiro que se pretende encriptar e passa


para a função ENIGMA;
2. A função ENIGMA procura o codigo ASCII do caracter no 1º array e fixa o
indice da posição em que se encontra no array;
3. O programa posiciona-se no 1º caracter da password, retira o décimal do
codigo ASCII e percorre no array, no sentido ascendente, o número de
posições correspondentes ao decimal do caracter da password;
4. Na posição onde parar, guarda o caracter correspondente, passa para o 2º
array, procura esse caracter no segundo array, vai ao 2º caracter da password
e repete o mesmo processo até ao 4º array;
5. O caracter devolvido pelo 4º array será o caracter encriptado;
6. Nesta fase a função retorna esse caracter à função principal para esta guardar
no ficheiro gerado.

Este processo repetir-se-á enquanto a função principal passar caracteres para a


função ENIGMA.

4
Quando a função principal deixar de passar caracteres para esta função, o ficheiro
estará encriptado.

No modo de desencriptação, o processo é metodologicamente idêntico mas será


iniciado de forma contrária, começando pelo 4º array e percorrendo os arrays no
sentido descendente até chegar ao 1º array que devolverá o caracter desencriptado.

CONSIDERAÇÕES FINAIS

Gostaríamos no final deste relatório de realçar a importância que este projecto


representou para o grupo, por ter possibilitado aprofundar conhecimentos em
programação, utilizando a linguagem C.

No decorrer da elaboração do projecto, as dificuldades sentidas relacionaram-se com:

O tratamento das variáveis do tipo “int”, quando aplicados ao código ASCII,


dando valores negativos;
O tratamento de texto “char”, na utilização de texto dinâmico;
Dificuldades com os compiladores usados, “Dev c++” e “Pelles”, pois o que um
compila o outro não;
Dificuldades de análise dos erros de compilação gerados;
Dificuldades gerais relativas a funções e livrarias a usar.

As estratégias utilizadas, para ultrapassar os obstáculos que foram surgindo,


permitiram ao grupo alcançar o objectivo proposto com sucesso, o que
consequentemente resultou em motivação e satisfação pelo trabalho realizado.

5
ANEXO I

FLUXOGRAMA

6
Inicio

Tem
Não parâmetros Sim
iniciais

Opção:
Validação dos
Encriptação parâmetros,
seleccionando
Desemcriptação
o percurso a
percorrer de
Opção:
acordo com os
Algoritmo a usar parâmetros
iniciais.

Ficheiro de
Origem Abre
ficheiro
Ficheiro de Destino
Origem e
Pasword destino

Processa
de
acordo
com a
Fecha
Ficheiros

Origem

Se foi
através dos
Não parâmetro Sim Fim
de entrada

Você também pode gostar