Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

inforthiago

Criptografia com arquivos

Recommended Posts

Olá galera beleza !!!

 

Sou um grande frequentador dos foruns do imaster e até ja ajudei algumas pessoas. Mas hj é eu que estou precisando de uma ajudinha. Gostaria de saber se alguém tem algum conhecimento em arquivos em C. Pois até consegui fazer a query o arquivo roda sem dar erro, mas o progrema é que na hora de executar não abre nada só pisca na tela.

 

Bom galera sem mais delongas segue o código abaixo.

 

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

void encode(FILE *input, FILE *output, char *key)
{
   	// Ci=Pi+Ki (mod 26)

   	int kindex=0,x;

   	do
   	{
       		x=getc(input);
       		if(x!=EOF)
       		{
	       		if(!key[kindex])
                		kindex=0;

			key[kindex]=toupper(key[kindex]);

		        if(x>='A' && x<='Z')
        		{
				x-='A';
	                	x=(x+key[kindex]-'A')%26;
        	         	x+='A';
                 
                 		kindex++;
            		}
	            	if(x>='a' && x<='z')
        	    	{
				x-='a';
	                	x=(x+key[kindex]-'A')%26;
        	         	x+='a';
                 
                 		kindex++;
	            	}

	     		putc(x,output);			
       		}
   	}
   	while(x!=EOF);
	putc('\n',output);   
}

int main (int argc, char **argv)
{
	FILE *input,*output; 
   	char key[1024];

   	if(argc!=4)
   	{
		printf("Uso:\n%s <input_file> <output_file> <key>\n",argv[0]);
      		exit(EXIT_FAILURE);
   	}
   	
   	puts("\n\nDigite a chave:");
	fgets(key,1024,stdin);

   	strncpy(key,argv[3],1024);
   	if(strlen(key)==1)
   	{
      		printf("Chave de apenas um digito!\n");
      		exit(EXIT_FAILURE);
   	}
   
   	input=fopen("entrada.txt","r");
   	if(!input)
   	{
      		printf("Nao foi possivel abrir o arquivo %s\n","entrada.txt");
   	   	exit(EXIT_FAILURE);
   	}

   	output=fopen("saida.txt","w");
   	if(!output)
   	{
      		printf("Nao foi possivel criar o arquivo %s\n","saida.txt");
      		exit(EXIT_FAILURE);
   	}

   	encode(input,output,key);

	fclose(input);
	fclose(output);	

  	return(0);  	
}

Desde já eu agradeço ajuda de vcs.

 

Obrigado

 

inforthiago

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom para melhor poder te ajudar..

como é o conteudo desse "entrada.txt", ql saida esperada, e bla bla bla ;D

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom para melhor poder te ajudar..

como é o conteudo desse "entrada.txt", ql saida esperada, e bla bla bla ;D

 

[]s

 

Segue abaixo o conteudo ja modificado pra ser criptografado.

 

Exemplo de 3 linhas.

 

capituloipreliminaresoplanaltocentraldobrasildescenoslitoraisdosulemescarpasinteiricasaltaseabruptasassoberbaosmaresedesataseemchapadoesniveladospelosvisosdascordilheirasmaritimasdistendidasdoriograndeaminasmasaoderivarparaasterrassetentrionaisdiminuigradualmentedealtitudeaomesmotempoquedescambaparaacostaorientalemandaresourepetidossocalcos

 

O que programa deverá fazer?

 

pedir uma chave para criptografar o texto acima.

 

Ex:

 

chave: madeira

 

A chave vai comparar o arquivo dessa forma.

 

compara o "m" de madeira (1ª letra da chave)

com o "c" de capitulo (1ª letra do arquivo)

compara o "a" de madeira (2ª letra da chave)

com o "a" de capitulo (2ª letra do arquivo)

compara o "d" de madeira (3ª letra da chave)

com o "p" de capitulo (3ª letra do arquivo)

 

Imagem Postada

 

Criptografia - oas...

 

E assim por diante até que o arquivo chegue ao final.

 

Resumidamente o programa deve fazer a criptografia e desfazer-la também.

 

Agradeço pela sua intenção, mas o que você puder fazer pra ajudar será de extrema ajuda.

 

Obrigado mais uma vez.

 

inforthiago

Compartilhar este post


Link para o post
Compartilhar em outros sites

mano kkk to viajando..

faz assim, poste um exemplo de entrada e um de saída beleza?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar explicar de uma outra forma.

 

Esse codigo abaixo faz o que eu quero fazer, sendo que você tem q informar a string que você quer inserir. Eu gostaria de fazer isso mas utilizando um arquivo com um texto e outro arquivo para gravar a criptografia.

 

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

void upstring(char *buffer)
{
	int count=0;
	while(buffer[count]!='\0')
	{
		buffer[count]=toupper(buffer[count]);
		count++;
	}
}

void encode(char *string, char *key)
{
	int kindex=0,count=0;

	while(string[count]!='\0')
	{
		// Ci=Pi+Ki (mod 26)
		if(string[count]>=65&&string[count]<=90)
		{
			if(key[kindex]=='\0'||key[kindex]=='\n')
				kindex=0;

			string[count]-=65;
			string[count]=(string[count]+(key[kindex]-65))%26;
			if(string[count]<0)
				string[count]+=26;			
			string[count]+=65;

			// To check bugs!
			if(string[count]<65||string[count]>90)
			{
				puts("Bug found!");
				getch();
				exit(-1);
			}

			kindex++;
		}
		
		count++;
	}
}

int main (int argc, char **argv)
{
	char string[1024],key[1024];
	int k;

	if(argc>3||argc==2)
	{
		printf("Uso:\n%s <string> <key>\n",argv[0]);
		getch();
		exit(0);
	}

	if(argc==1)
	{
		puts("Digite a string a ser encriptada:");
		fgets(string,1024,stdin);

		k=strlen(string)-1;
		if(string[k]=='\n')
			string[k]='\0';

		if(!strlen(string))
		{
			puts("Nao forneceu nenhuma string!");
			getch();
			exit(0);
		}


		puts("\nDigite a chave:");
		fgets(key,1024,stdin);

		k=strlen(key)-1;
		if(key[k]=='\n')
			key[k]='\0';

		if(!strlen(key))
		{
			puts("Nao forneceu nenhuma chave!");
			getch();
			exit(0);
		}
	}
	else
	{
		strncpy(string,argv[1],1024);
		strncpy(key,argv[2],1024);
	}

	if(strlen(key)==1)
	{
		puts("Chave com apenas um digito!");
		exit(0);
	}

	upstring(string);
	upstring(key);
	
	printf("\n");
	
	encode(string,key);

	puts(string);
	getch();

	return(0);
}

Gostaria de fazer isso utilizando arquivos.

 

Ex:

 

arquivo.txt (imagina um texto qualquer)

chave: (criada pelo usuário)

arquivo2.txt (grava a criptografia)Ex: piyhfzrbfi

 

Obrigado pela sua preocupação por me ajudar. Se não entender eu posso te explicar de uma outra forma, mas acho eu que com exemplo de codigo acima vai ajudar muito.

 

Vlw

 

inforthiago

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta ok, então pelo que eu entendi sua dúvida é na manipulação de arquivos texto? SÓ ISSO?

Você qr ler a "string" do txt, e jogar criptografada para outro *txt??

SÓ?

 

Se for eu fiz algumas coisinhas básicas:


void leTxt(char *string){
    FILE *arq;
    if ((arq = fopen("arq1.txt","r")) == NULL) exit(1);
    fscanf(arq,"%s", string);
    fclose(arq);
}

void escreveTxt(char *string){
    FILE *arq;
    if ((arq = fopen("arq2.txt","w+")) == NULL) exit(1);
    fputs(string,arq);
    fclose(arq);
}

.
.
.

if(argc==1)
        {
                //puts("Digite a string a ser encriptada:");
                //fgets(string,1024,stdin);
                leTxt(string);

                k=strlen(string)-1;
.
.
.
        encode(string,key);

        puts(string);
        escreveTxt(string);
.
.

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.