0
I am developing a program in C, which will be able to encrypt and decrypt texts and save them to disk separately.
I want to use the ASCII table for the implementation of Cryptography, I am able to encrypt but when reversing the text I am having great difficulties, the program saves only a "random" character instead of saving the text that was typed before being encrypted.
Follow the code below:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Criptografar(char chave[])
{
int tam_chave = strlen(chave); //Configuração da chave para criptografia
char texto[100000]; //Vetor de entrada de texto a ser criptografado
int texto_cript[100000]; //Vetor de encriptação
int valor_chave, aux = 0, i; //Variáveis de controle de chave
FILE *arquivo; //ponteiro do arquivo
printf("\n\nDigite o texto a ser criptografado: \n");
scanf("\n%[^\n]s", texto); //Lê o que você digitar
printf("\n\n"); //Separa pra não virar bagunça
for(i = 0; i < strlen(texto); i++)
{
texto_cript[i]=texto[i]; //Atribui pro TEXTO_CRIPT o ASCII dos caracteres digitados
}
while(aux < strlen(texto)) //Vai de 0 até o tamanho do texto incrementando dentro do for
{
for(i = 0; i < tam_chave; i++)//Percorre a chave dinâmicamente ex.: "aBcd" 0123
{
valor_chave = chave[i]; //pega o ASCII da chave dinâmicamente ex.: "a" = 65
texto_cript[aux] *= valor_chave; //multiplica o ASCII de TEXTO_CRIPT pelo ASCII de VALOR_CHAVE e atribui para TEXTO_CRIPT.
//EX.: "a" 65 * 65 = 4225
aux++; //incrementa o AUX
}
}
arquivo = fopen("criptografado.txt", "w"); //Cria o arquivo pra escrita
if (arquivo==NULL)
{
printf("\n\nErro ao criar o arquivo.....\n\n\n");
}
else
{
for (i = 0; i < strlen(texto); i++)//percorre o texto digitado pelo usuário
{
fprintf(arquivo, "%d", texto_cript[i]); //grava em arquivo o texto já encriptado
}
}
fclose(arquivo); //fecha o arquivo
}
int Descriptografar(char chave[])
{
int tam_chave = strlen(chave); //Configuração da chave para criptografia
int texto_decript[100000]; //Vetor de descriptação
int valor, pos_chave = 0, pos_texto = 0, i; //Variáveis de controle de chave
FILE *arquivo;
arquivo = fopen("criptografado.txt", "r"); //Abre o arquivo para leitura
if (arquivo==NULL)
{
printf("\n\nErro ao criar o arquivo.....\n\n\n");
}
else
{
while(!feof(arquivo)) //Percorre o arquivo criptografado até o final
{
fscanf(arquivo,"%d", &valor); //Lê os valores criptografados em ASCII
valor /= chave[pos_chave]; //Divide o valor pelo ASCII da posição ASCII da chave
texto_decript[pos_texto] = (char)valor; //TEXTO_DECRIPT recebe o typecasting de valor, ex.: 65 = "a"
pos_texto++; //incrementa a posição do vetor TEXTO_DECRIPT
if (pos_chave == tam_chave-1) //Percorre a chave e retorna na posição inicial
{
pos_chave = 0;
}
else
{
pos_chave++; //Senão, incrementa a chave
}
}
}
fclose(arquivo); //Fecha o aarquivo com o texto criptografado
arquivo = fopen("descriptografado.txt", "w"); //Cria um novo arquivo para escrita
fprintf(arquivo, "%s", texto_decript); //Grava em arquivo o texto já decriptado
printf("\n\nO arquivo foi descriptado com sucesso!\n\n\n"); //Frescura minha pra dizer que terminou a função
}
int main(void)
{
int opcao = 0;
do
{
//MENU
printf("\nSelecione uma opcao:\n 1 - Criptografar texto digitado.\n 2 - Descriptografar texto.\n 3 - Sair.\n");
scanf("%d", &opcao);
switch(opcao)
{
case 1:
Criptografar("AbCd"); //Ativa a função passando como parâmetro a chave desejada
break;
case 2:
Descriptografar("AbCd"); //Faz a mesma coisa que eu comentei acima
break;
case 3:
continue;
break;
default:
printf("\nOpcao invalida! Tente Novamente.\n\n");
}
}while(opcao != 3);
return 0;
}