Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Name: Projeto de Segurança de Dados e Informações - 17/04/2012
- Copyright: GNU GPL v2
- Autores:
- Alysson de Azevedo - RA 101528,
- Luiz de Freitas - RA
- Gustavo Germano - RA
- Sandro Pereira - RA
- Silvio Hashimoto - RA Date: 27/04/12 15:41
- Description:
- Programa para criptografar e descriptografar arquivos texto.
- Modo de Uso:
- Para usar o programa, é necessário possuir um login e uma senha, que pode
- ser criado utilizando a opção disponível no menu inicial.
- Após informar corretamente o login e senha, será possível utilizar o
- sistema para criptografar e/ou descriptografar o arquivo de texto desejado.
- Variáveis:
- O usuário seleciona a opção criptografar, digita o nome do arquivo .txt que quer criptografar e
- através de uma senha (chave) é criado um arquivo criptografado.
- Para descriptografar, seleciona a opção descriptografar, digita o nome do arquivo criptografado,
- informa a senha e obtém o arquivo conforme o original.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.c>
- // Declaração de variáveis principais
- #define H 3
- char fnLogin [50] = "encriptatexto.dat";
- FILE *arqLogin, *arqEntrada, *arqSaida;
- typedef struct LOGIN {
- char user[31];
- char pass[31];
- } LOGIN;
- // Declaração de funções principais
- int askLogin ( LOGIN* );
- int seekLogin ( char*, LOGIN* );
- int doLogin ( void );
- int newLogin ( void );
- int abrirArqs ( int );
- void fecharArqs ( void );
- int txtToCrp ( char* );
- int crpToTxt ( char* );
- void byteToHexa ( unsigned char*, unsigned char );
- void hexaToByte ( unsigned char*, unsigned char* );
- // Declaração de funções descritivas
- void showAjuda(int);
- // Declaração de variáveis auxiliares - Disposição dos objetos na tela
- int yS=1, /* Linha Horizontal Superior */
- yM=11, /* Linha Horizontal do Meio, deve ser maior que yS e menor que yI*/
- yI=24, /* Linha Horizontal Inferior */
- xE=2, /* Linha Vertical da Esquerda */
- xM=36, /* Linha Vertical do Meio, deve ser maior que xE e menor que yR*/
- xR=79, /* Linha Vertical da Direita */
- //coresArea[2] = {TextColor,Background}
- coresMenu[2] = {WHITE,LIGHTBLUE}, /* Cor do Quadro Menu */
- coresAjuda[2] = {BLUE,LIGHTRED}, /* Cor do Quadro Ajuda */
- coresCorpo[2] = {BLACK,WHITE}, /* Cor do Quadro Corpo */
- coresBorda[2] = {WHITE,BLACK}; /* Cor da Borda */
- // Declaração de funções auxiliares
- void leValor(char*, void*);
- void moldura(void); //Redesenha a tela, bordas e cores
- void corTexto(char *Area); //Define a cor do texto que será exibido
- int main(int argc, char** argv){
- int opc, resp, logado = -1;
- char passArq[50];
- do {
- moldura();
- showAjuda(0); //0: Informações
- // Aqui escrevemos o texto que ficará no Quadro Menu
- corTexto("menu");
- gotoxy(xE+3,yS+1); printf("MENU");
- if (logado != 0) { //Deslogado
- gotoxy(xE+3,yS+3); printf("1: Login");
- gotoxy(xE+3,yS+4); printf("2: Criar usu%crio",160);
- gotoxy(xE+3,yS+8); printf("0: Sair");
- }
- else { //Logado
- gotoxy(xE+3,yS+3); printf("1: Criptografar");
- gotoxy(xE+3,yS+4); printf("2: Decriptografar");
- gotoxy(xE+3,yS+8); printf("0: Deslogar");
- }
- gotoxy(xE+3,yS+5); printf("3: Sobre o programa");
- gotoxy(xE+3,yS+6); printf("4: Sobre a chave");
- gotoxy(xE+3,yS+7); printf("5: Equipe");
- gotoxy(xE+3,yS+9); printf("Op%c%co: _",135,198);
- gotoxy(xE+10,yS+9);leValor("%d", &opc);
- // Aqui escrevemos os textos que ficarão no Quadro Corpo
- corTexto("corpo");
- //gotoxy(xE+3,yM+2); printf("");
- switch (opc) {
- case 0:
- if (logado == 0){ //se estiver logado, apenas desconecta
- logado = -1;
- opc = -1;
- }
- else {
- gotoxy(xE+3,yM+3);printf("Lembre-se: Seguran%ca %c uma quest%co de tempo! Bye. o/",135,130,198);
- gotoxy(xE+3,yM+4);printf("Aperte [ENTER] para sair.");
- gotoxy(80,25); getche(); //Para no final do programa
- }
- break;
- case 1:
- if (logado != 0){ //Se não estiver logado, chama a função de login
- showAjuda(1); //1: Login
- logado = doLogin(); //Retorna 0 quando logado com sucesso
- if (logado == -1) { // Se não conseguir abrir o arquivo de configuração
- opc = 0;
- gotoxy(xE+3,23); printf("Aperte [ENTER] para sair.");
- gotoxy(80,25); getche(); //Para no final do programa
- } else
- if (logado == 1) {
- gotoxy(80,25); getche(); //Para no final do programa
- }
- }
- else {
- showAjuda(3); //4: Criptografar
- if (abrirArqs(opc) == 1) continue; //se abrirArqs retornar 1, é pq deu erro
- gotoxy(xE+3,yM+5); printf("Digite uma senha: ");
- leValor("%[^\n]",passArq);
- txtToCrp(passArq);
- fecharArqs();
- gotoxy(80,25); getche(); //Para no final do programa
- }
- break;
- case 2:
- if (logado != 0){ //Se não estiver logado, chama a função de login
- showAjuda(2); //2: Criar usuário
- resp = newLogin();
- if (resp == -1) { // Se não conseguir abrir o arquivo de configuração
- opc = 0;
- gotoxy(xE+3,23); printf("Aperte [ENTER] para sair.");
- }
- gotoxy(80,25); getche(); //Para no final do programa
- }
- else {
- showAjuda(4); //4: Descriptografar
- if (abrirArqs(opc) == 1) continue; //se abrirArqs retornar 1, é pq deu erro
- gotoxy(xE+3,yM+5); printf("Digite a senha: ");
- leValor("%[^\n]",passArq);
- crpToTxt(passArq);
- fecharArqs();
- gotoxy(80,25); getche(); //Para no final do programa
- }
- break;
- case 3:
- gotoxy(xE+3,yM+3); printf("Sobre o programa:");
- gotoxy(xE+3,yM+5); printf("O programa para criptografar e descriptografar foi desenvolvido em sala ");
- gotoxy(xE+3,yM+6); printf("de aula pelos alunos do 5%c semestre de Inform%ctica. ",167,160);
- gotoxy(80,25); getche(); //Para no final do programa
- break;
- case 4:
- gotoxy(xE+3,yM+3); printf("A chave %c um mist%crio!",130,130);
- gotoxy(80,25); getche(); //Para no final do programa
- break;
- case 5:
- gotoxy(xE+3,yM+3); printf("Alysson Azevedo");
- gotoxy(xE+3,yM+4); printf("Luiz Roberto de Freitas");
- gotoxy(xE+3,yM+5); printf("Gustavo Germano");
- gotoxy(xE+3,yM+6); printf("Sandro S%crgio Pereira",130);
- gotoxy(xE+3,yM+7); printf("Silvio Hashimoto");
- gotoxy(80,25); getche(); //Para no final do programa
- break;
- default:
- gotoxy(xE+3,yM+3); printf("Op%c%co inv%clida!",135,198,160);
- gotoxy(80,25); getche(); //Para no final do programa
- break;
- }
- }
- while(opc!=0);
- return 0;
- }
- int askLogin(LOGIN *login){
- LOGIN aLogin;
- char hex[H] = "";
- int i;
- strcpy(aLogin.user,"");
- strcpy(aLogin.pass,"");
- strcpy(login->user,"");
- strcpy(login->pass,"");
- gotoxy(xE+3,yM+3); printf("Digite seu usu%crio: ",160);
- gotoxy(xE+3,yM+4); leValor("%[^\n]",aLogin.user);
- gotoxy(xE+3,yM+4); printf(" ");
- if (strcmp(aLogin.user,"") == 0) {
- gotoxy(xE+3,yM+3); printf("Usu%crio deve ser preenchido. ",160);
- gotoxy(xE+3,yM+4); printf("Aperte [ENTER] para voltar. ");
- return 1;
- }
- if (strlen(aLogin.user) >= 11) {
- gotoxy(xE+3,yM+3); printf("Nome do usu%crio deve ter menos de 10 caracteres.",160);
- gotoxy(xE+3,yM+4); printf("Aperte [ENTER] para voltar. ");
- return 1;
- }
- gotoxy(xE+3,yM+3); printf("Digite sua senha: ");
- textcolor(coresCorpo[1]); //Deixa a senha com a mesma cor do fundo da tela
- gotoxy(xE+3,yM+4); leValor("%[^\n]",aLogin.pass);
- textcolor(coresCorpo[0]); //Volta a exibir os textos com a cor normal
- if (strlen(aLogin.pass) >= 11) {
- gotoxy(xE+3,yM+3); printf("A senha deve ter menos de 10 caracteres.");
- gotoxy(xE+3,yM+4); printf("Aperte [ENTER] para voltar. ");
- return 1;
- }
- gotoxy(xE+3,yM+5);
- //Sem criptografia
- // strcpy(login->user,aLogin.user);
- // strcpy(login->pass,aLogin.pass);
- //Com criptografia
- for (i=0;i<strlen(aLogin.user);i++) {
- byteToHexa(hex,aLogin.user[i]);//Converte a letra pra Hex
- strcat(login->user,hex);
- }
- for (i=0;i<strlen(aLogin.pass);i++) {
- byteToHexa(hex,aLogin.pass[i]);//Converte a letra pra Hex
- strcat(login->pass,hex);
- }
- return 0;
- }
- int seekLogin(char *user, LOGIN *login){
- LOGIN sLogin;
- char hex[H], userCrp[31] = "";
- int i;
- if (!(arqLogin = fopen(fnLogin,"rb"))) //se não conseguir abrir o arquivo em modo de escrita
- return -1;
- strcpy(login->user,"");
- strcpy(login->pass,"");
- do {
- fread(&sLogin, sizeof(LOGIN),1,arqLogin); //Lê a quantidade H de chars para montar o valor hexa
- if (feof(arqLogin)) continue; //Sai ao alcançar EOF
- if (strcmp(user,sLogin.user) == 0) {
- strcpy(login->user,sLogin.user);
- strcpy(login->pass,sLogin.pass);
- break;
- }
- } while (!feof(arqLogin));
- fclose(arqLogin);
- return 0;
- }
- int doLogin(void){
- LOGIN aLogin,sLogin;
- if (askLogin(&aLogin) == 1)
- return 1; //Se der alguma coisa errada com o que o user digitar
- if (seekLogin(aLogin.user,&sLogin) == -1){
- corTexto("erro");
- gotoxy(xE+3,22);printf("Erro! Imposs%cvel abrir o arquivo de configura%c%co! ",161,135,198);
- }
- if ((strcmp(aLogin.user,sLogin.user) == 0) && (strcmp(aLogin.pass,sLogin.pass) == 0))
- return 0;
- else {
- gotoxy(xE+3,yM+3); printf("Usu%crio ou senha incorretos. ",160);
- gotoxy(xE+3,yM+4); printf("Aperte [ENTER] para voltar. ");
- return 1;
- }
- }
- int newLogin(void){
- LOGIN aLogin,sLogin;
- if (askLogin(&aLogin) == 1) {//O usuário e senha não foram digitados corretamente
- fclose(arqLogin);
- return 1;
- }
- seekLogin(aLogin.user,&sLogin);
- if (strcmp(aLogin.user,sLogin.user) == 0) {
- gotoxy(xE+3,yM+3); printf("Usu%crio indispon%cvel. Tente novamente.",160,161);
- gotoxy(xE+3,yM+4); printf("Aperte [ENTER] para voltar. ");
- fclose(arqLogin);
- return 1;
- }
- if (!(arqLogin = fopen(fnLogin,"ab")))
- return -1;
- fwrite(&aLogin, sizeof(LOGIN),1,arqLogin);
- gotoxy(xE+3,yM+3); printf("Usu%crio cadastrado com sucesso. ",160);
- gotoxy(xE+3,yM+4); printf("Aperte [ENTER] para voltar. ");
- fclose(arqLogin);
- return 0;
- }
- int abrirArqs(int opc){
- char nomeEntrada[250];
- char nomeSaida[255];
- //Digitar o nome do arquivo (completo, com extensão e tudo)
- gotoxy(xE+3,yM+3); printf("Digite o nome do arquivo: ");
- leValor("%[^\n]",nomeEntrada);
- //Define nomes dos arquivos
- if (opc == 1) { //Opc = 1: Encriptogravar
- strcpy(nomeSaida,nomeEntrada); //arquivo Entrada = test.txt
- strcat(nomeSaida,".crp"); //arquivo Saida = test.txt.crp
- } else { //Opc = 2: Descriptogravar
- strcpy(nomeSaida,nomeEntrada); //arquivo Entrada = test.txt.crp
- strcat(nomeEntrada,".crp"); //arquivo Saida = test.txt
- }
- //Abre o arquivo de entrada em modo de leitura
- if (!(arqEntrada = fopen(nomeEntrada,"rb"))) {
- gotoxy(xE+3,yM+8);printf("Erro! Imposs%cvel abrir o arquivo de entrada!",141);
- return 1;
- }
- //Abre o arquivo de saida em modo de escrita
- if (!(arqSaida = fopen(nomeSaida,"wb"))) {
- fecharArqs();
- gotoxy(xE+3,yM+8); printf("Erro! N%co foi poss%cvel criar arquivo de saida!",198,141);
- return 1;
- }
- return 0;
- }
- void fecharArqs( void ) {
- if (arqEntrada != NULL) fclose(arqEntrada);
- if (arqSaida != NULL) fclose(arqSaida);
- }
- int txtToCrp( char *pSenha ){
- char chave, letra, hex[H];
- int t,p,i = 0;
- if ((arqEntrada == NULL) || (arqSaida == NULL)) {
- gotoxy(xE+3,yM+8); printf("Erro: N%co ser%c poss%cvel desencriptografar o arquivo.",198,160,141);
- //return 1;
- }
- t = strlen(pSenha);
- do {
- fread(&letra,sizeof(char),1,arqEntrada);//Lê a proxima char do arquivo
- if (feof(arqEntrada)) continue; //Sai ao alcançar EOF
- if (t > 0) {//Criptografa
- p = t - i % t - 1;//Pega o index para a letra da senha, em ordem invertida
- chave = pSenha[p];
- letra = letra + chave;
- }
- byteToHexa(hex,letra);//Converte a letra pra Hex
- fwrite(hex, sizeof(char),H,arqSaida);
- i++;
- } while (!feof(arqEntrada));
- gotoxy(xE+3,yM+8); printf("Arquivo encriptografado com sucesso.");
- //return 0;
- }
- int crpToTxt(char *pSenha){
- char chave, letra, hex[H];
- int t,p,i = 0;
- if ((arqEntrada == NULL) || (arqSaida == NULL)) {
- gotoxy(xE+3,yM+8); printf("Erro: N%co ser%c poss%cvel desencriptografar o arquivo.",198,160,141);
- // return 1;
- }
- t = strlen(pSenha); //Pega o tamanho da senha
- do {
- fread(hex, sizeof(char),H,arqEntrada); //Lê a quantidade H de chars para montar o valor hexa
- if (feof(arqEntrada)) continue; //Sai ao alcançar EOF
- hexaToByte(&letra,hex);////Converte a letra pra Dec
- if (t > 0) {//Descritografa
- p = t - i % t - 1;//Pega o index para a letra da senha, em ordem invertida
- chave = pSenha[p];
- letra = letra - chave;
- }
- fwrite(&letra, sizeof(char),1,arqSaida);
- i++;
- } while (!feof(arqEntrada));
- gotoxy(xE+3,yM+8); printf("Arquivo descriptografado com sucesso.");
- //return 0;
- }
- void byteToHexa (unsigned char *hex, unsigned char letra){
- char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
- int val = letra,aux[H], i;
- for (i = H - 1; i >= 0; --i) {
- aux[i] = val % 16;
- val = (val - aux[i]) / 16;
- hex[i] = vet[aux[i]];
- }
- }
- void hexaToByte (unsigned char *letra, unsigned char *hex){
- int aux[H], i;
- for (i = 0; i < H; i++){
- if ((hex[i] >= '0') && (hex[i] <= '9'))
- aux[i] = hex[i] - '0';
- else
- if ((hex[i] >= 'A') && (hex[i] <= 'F'))
- aux[i] = hex[i] - 'A' + 10;
- }
- *letra = (aux[0] * 16 * 16) + (aux[1] * 16) + aux[2];
- }
- void showAjuda(int id){
- // Aqui escrevemos o texto que ficará no Quadro Ajuda
- corTexto("ajuda");
- switch (id){
- case 1:
- gotoxy(xM+3,yS+1); printf("LOGIN ");
- gotoxy(xM+3,yS+4); printf("Para acessar o programa, %c necess%crio",130,160);
- gotoxy(xM+3,yS+5); printf("um usu%crio e uma senha. ",160);
- gotoxy(xM+3,yS+6); printf("Caso n%co possua, selecione a op%c%co: ",198,135,198);
- gotoxy(xM+3,yS+7); printf("%c2: Criar usu%crio%c no menu anterior.",34,160,34);
- break;
- case 2:
- gotoxy(xM+3,yS+1); printf("CRIAR NOVO USU%CRIO ",181);
- gotoxy(xM+3,yS+4); printf("Digite um nome para seu novo usu%crio. ",160);
- gotoxy(xM+3,yS+5); printf("Ele deve ter menos de 10 letras e n%co ",198);
- gotoxy(xM+3,yS+6); printf("conter caracteres especiais nem ");
- gotoxy(xM+3,yS+7); printf("espa%cos em brancos. ",135);
- break;
- case 3:
- gotoxy(xM+3,yS+1); printf("CRIPTOGRAFAR UM ARQUIVO TEXTO ");
- gotoxy(xM+3,yS+4); printf("Digite o nome do arquivo desejado. ");
- gotoxy(xM+3,yS+5); printf("Ex: arquivo_texto.txt ");
- gotoxy(xM+3,yS+6); printf("Ser%c criado um arquivo j%c cripto- ",160,160);
- gotoxy(xM+3,yS+7); printf("grafado. Ex: arquivo_texto.txt.crp ");
- break;
- case 4:
- gotoxy(xM+3,yS+1); printf("DESCRIPTOGRAFAR UM ARQUIVO TEXTO ");
- gotoxy(xM+3,yS+4); printf("Digite o nome do arquivo desejado. ");
- gotoxy(xM+3,yS+5); printf("Ex: arquivo_texto.txt ");
- gotoxy(xM+3,yS+6); printf("O arquivo desejado ser%c descripto- ",160);
- gotoxy(xM+3,yS+7); printf("grado. ");
- break;
- default:
- gotoxy(xM+3,yS+1); printf("FATEC-INFORM%CTICA ",181);
- gotoxy(xM+3,yS+4); printf("Projeto de Seguran%ca de Dados. ",135);
- gotoxy(xM+3,yS+5); printf("Criptografar e descriptografar ");
- gotoxy(xM+3,yS+6); printf("arquivos usando algoritmo assim%ctrico.",130);
- gotoxy(xM+3,yS+7); printf(" ");
- break;
- }
- corTexto("corpo");
- }
- /* Funções auxiliares, Não alterar nada apartir daqui. */
- //Le um valor, com um scanf comum e limpa o buffer
- void leValor(char *mode, void *var){
- scanf(mode, var);
- scanf("%*[^\n]");
- scanf("%*c");
- }
- //Desenha a tela com bordas e cores definidas pelas variaveis
- void moldura(){
- int i; //var auxiliar
- corTexto("borda");
- clrscr();
- //Preenche as cores das divisoes
- for (i=yS+1;i<yI;i++)
- {
- if (i<yM)
- {
- gotoxy(xE+2,i); corTexto("menu"); clreol();
- gotoxy(xM-1,i); corTexto("borda"); printf(" ");
- gotoxy(xM+1,i); corTexto("ajuda"); clreol();
- gotoxy(xM+1,i); corTexto("borda"); printf(" ");
- }
- else
- {
- gotoxy(xE+2,i); corTexto("corpo"); clreol();
- }
- gotoxy(xR-1,i); corTexto("borda"); printf(" ");
- }
- //Preenche linhas horizontais
- for (i=xE;i<=xR;i++)
- {
- gotoxy(i,yS); printf("%c",205);
- gotoxy(i,yS+2); printf("%c",205);
- gotoxy(i,yM); printf("%c",205);
- gotoxy(i,yI); printf("%c",205);
- }
- //preenche linhas verticais
- for (i=yS;i<=yI;i++)
- {
- gotoxy(xE,i); printf("%c",186);
- if (i>1 && i<yM)
- {
- gotoxy(xM,i); printf("%c",186);
- }
- gotoxy(xR,i); printf("%c",186);
- gotoxy(xR+1,i); clreol(); //Corrije cor no final da borda
- }
- //preenche quinas das linhas horizontais e verticais
- gotoxy(xE,yS); printf("%c",201);
- gotoxy(xM,yS); printf("%c",203);
- gotoxy(xR,yS); printf("%c",187);
- gotoxy(xE,yS+2);printf("%c",204);
- gotoxy(xM,yS+2);printf("%c",206);
- gotoxy(xR,yS+2);printf("%c",185);
- gotoxy(xE,yM); printf("%c",204);
- gotoxy(xM,yM); printf("%c",202);
- gotoxy(xR,yM); printf("%c",185);
- gotoxy(xE,yI); printf("%c",200);
- gotoxy(xR,yI); printf("%c",188);
- gotoxy(1,25); clreol(); //Limpa a ultima linha
- }
- void corTexto(char *Area)
- {
- if (strcmp(Area,"menu") == 0){
- textcolor(coresMenu[0]);
- textbackground(coresMenu[1]);
- } else
- if (strcmp(Area,"ajuda") == 0){
- textcolor(coresAjuda[0]);
- textbackground(coresAjuda[1]);
- } else
- if (strcmp(Area,"corpo") == 0){
- textcolor(coresCorpo[0]);
- textbackground(coresCorpo[1]);
- } else
- if (strcmp(Area,"borda") == 0){
- textcolor(coresBorda[0]);
- textbackground(coresBorda[1]);
- } else
- if (strcmp(Area,"erro") == 0){
- textcolor(LIGHTRED);
- textbackground(coresCorpo[1]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement