Leonardo Prass Postado Novembro 25, 2015 Denunciar Share Postado Novembro 25, 2015 #include <iostream> #include <string.h> #include<stdlib.h> #include<stdio.h> #include<ctype.h> #include<fstream> using namespace std; ////Com Espaços e Numeros void cript_espnum() { char frase[30],frase_cript[30],chave[10],chave_estendida[30],alfabeto[26][26],a='A',z,aux_linha,aux_coluna; int i,j; for(i=0;i<26;i++) { z=a; for(j=0;j<26;j++) { alfabeto[i][j]=z; if(z=='Z') { z='A'; } else { z++; } } a++; } setbuf(stdin,NULL); cout << "Digite a frase a ser criptografada:"; cin.getline(frase,30); cout << "Digite a chave:"; cin >> chave; for(i=0;i<strlen(frase);i++) { frase[i]=toupper(frase[i]); } for(i=0;i<strlen(chave);i++) { chave[i]=toupper(chave[i]); } for(int i=0,cont=0;i<strlen(frase);i++) { if(chave[cont] != '\0') { chave_estendida[i] = chave[cont]; } else { cont = 0; chave_estendida[i] = chave[cont]; } cont++; } chave_estendida[strlen(frase)] = '\0'; for(int i=0;i<strlen(frase);i++) { if(frase[i]>=65 && frase[i]<=90) { aux_linha=frase[i]-65; aux_coluna=chave_estendida[i]-65; frase_cript[i]=alfabeto[aux_linha][aux_coluna]; } else { frase_cript[i]=frase[i]; } } cout << "Frase criptografada:" << endl; cout << frase_cript<< endl; exit(0); } //Com Espaços void cript_espaco() { char frase[30],frase_cript[30],chave[10],chave_estendida[30],alfabeto[26][26],a='A',z,aux_linha,aux_coluna; int i,j; for(i=0;i<26;i++) { z=a; for(j=0;j<26;j++) { alfabeto[i][j]=z; if(z=='Z') { z='A'; } else { z++; } } a++; } setbuf(stdin,NULL); cout << "Digite a frase a ser criptografada:"; cin.getline(frase,30); cout << "Digite a chave:"; cin >> chave; for(i=0;i<strlen(frase);i++) { frase[i]=toupper(frase[i]); } for(i=0;i<strlen(chave);i++) { chave[i]=toupper(chave[i]); } for(int i=0,cont=0;i<strlen(frase);i++) { if(chave[cont] != '\0') { chave_estendida[i] = chave[cont]; } else { cont = 0; chave_estendida[i] = chave[cont]; } cont++; } for(int i=0;i<strlen(frase);i++) { if(frase[i]==32) { frase_cript[i]=32; } else { aux_linha=frase[i]-65; aux_coluna=chave_estendida[i]-65; frase_cript[i]=alfabeto[aux_linha][aux_coluna]; } } cout << "Frase criptografada:" << endl; cout << frase_cript << endl; exit(0); } void descript() { char frase_cript[500],chave[10],chave_estendida[500],alfabeto[26][26],aux,frase_descrip[500],auxl; int i; setbuf(stdin,NULL); ifstream arquivo_entrada; cout << "Digite a frase criptografada:"; cin.getline(frase_cript,500); cout << "Digite a chave utilizada:"; cin >> chave; for(i=0;i<strlen(frase_cript);i++) { frase_cript[i]=toupper(frase_cript[i]); } for(i=0;i<strlen(chave);i++) { chave[i]=toupper(chave[i]); } char a = 'A'; char z; for (int i = 0; i < 26; i++) { z = a; for (int j = 0; j < 26; j++) { alfabeto[i][j] = z; if (z == 'Z') { z = 'A'; } else { z++; } } a++; } for(int i=0,cont=0;i<strlen(frase_cript);i++) { if(chave[cont] != '\0') { chave_estendida[i] = chave[cont]; } else { cont = 0; chave_estendida[i] = chave[cont]; } cont++; } chave_estendida[strlen(frase_cript)] = '\0'; cout << chave_estendida << endl; for(int i=0;i<strlen(frase_cript);i++) { aux=chave_estendida[i]-65; for(int j=0;j<26;j++) { if(alfabeto[j][aux]==frase_cript[i]) { auxl=j+65; } } frase_descrip[i]=auxl; } cout << "Frase descriptografada:" << endl; cout << frase_descrip << endl; exit(0); } //Função criptografa void criptografa() { char alfabeto[26][26],frase[30]; char chave[10]; char a = 'A'; char z; for (int i = 0; i < 26; i++) { z = a; for (int j = 0; j < 26; j++) { alfabeto[i][j] = z; if (z == 'Z') { z = 'A'; } else { z++; } } a++; } setbuf(stdin,NULL); cout << "Digite uma frase:"; cin.getline(frase, 30); for (int i = 0; i < strlen(frase); i++) { frase[i]=toupper(frase[i]); } for (int i = 0; i < strlen(frase); i++) { if (frase[i] == ' ') { for (int y = i; y < strlen(frase); y++) frase[y] = frase[y + 1]; i--; } } cout << frase << endl; cout << "Digite a chave:"; cin >> chave; for(int i=0;i<strlen(chave);i++) { chave[i]=toupper(chave[i]); } char aux[30]; for (int i = 0, cont = 0; i < strlen(frase); i++) { if (chave[cont] != '\0') { aux[i] = chave[cont]; } else { cont = 0; aux[i] = chave[cont]; } cont++; } aux[strlen(frase)] = '\0'; cout<<aux << endl; char fraseaux[30],auxl,auxc,linha,frase_descript[30]; for(int i=0;i<strlen(frase);i++) { auxl=frase[i]-65; auxc=aux[i]-65; fraseaux[i]=alfabeto[auxl][auxc]; } exit(0); } //Função menu interno void Menuinterno () { char opcao; while(opcao!='a'||opcao!='b'||opcao!='c') { system("cls"); cout << "\n\tCriptografar"; cout << "\n\na - Sem espaco"; cout << "\n\nb - Manter os espaco"; cout << "\n\nc - Manter numeros"; cout << "\n\nEscolha uma opcao: "; cin >> opcao; switch(opcao) { case 'a': criptografa(); break; case 'b': cript_espaco(); break; case 'c': cript_espnum(); break; default: cout << "Opcao Invalida!Tente novamente!"; system("pause"); } } } //Função de menu void Menu() { char opcao; while(1) { system("cls"); cout<< "\n\tPrograma de Criptografia"; cout<<"\n\n 1 - Criptografar Arquivo"; cout << "\n\n 2 - Descriptografar Arquivo"; cout << "\n\n 3 - Creditos"; cout << "\n\n 4 - Sair"; cout << "\n\n Informe a opcao desejada: "; cin >> opcao; setbuf(stdin,NULL); switch(opcao) { case '1': Menuinterno(); break; case '2': descript() ; break; case '3': cout << "\n\nProgramadores:"; cout << " Leonardo\n"; system("pause"); break; case '4': cout << "\nFinalizando o programa!"; exit(0); break; default: cout << "Opcao Invalida!Tente novamente...\n"; system("pause"); } } } int main() { Menu(); } Eu gostaria que Alguém me ajuda-se a refinar este código e a colocar arquivo nele para poder ler um arquivo de texto ao invés de escrever uma frase só, e outra um menu que retornasse . Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 brunoandrad Postado Novembro 26, 2015 Denunciar Share Postado Novembro 26, 2015 Ola amigo, segue um código que eu tenho de criptografia, esta em C ao invés de C++, mas acredito que sirva para te dar uma ideia de como fazer: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> // Configuracao da chave para criptografia char CHAVE[500]; int TAM_CHAVE = strlen(CHAVE); bool set_chave(char chave[]){ if(strlen(chave)<500){ strcpy(CHAVE,chave); TAM_CHAVE = strlen(CHAVE); return true; }else{ return false; } } //---------------------------// // Vetor de entrada do texto a ser criptografado: char TEXTO[10000]; int TAM_TEXTO = 10000; //---------------------------------------------- int TEXTO_CRIPT[10000]; bool Criptografar(){ int aux = 0; int CHAVE_int; int pos_texto; for (int i=0; i < strlen(TEXTO); i++){ TEXTO_CRIPT[i] = TEXTO[i]; } printf("\n -- %d\n",TEXTO_CRIPT[0]); for (aux=0; aux<strlen(TEXTO); ){ for (int i=0; i<TAM_CHAVE; i++){ TEXTO_CRIPT[aux] *= CHAVE[i]; // Também pode ser: TEXTO_CRIPT[aux] = TEXTO_CRIPT[aux] * CHAVE[i]; aux++; } } printf("\n -- %d\n",TEXTO_CRIPT[0]); return true; } bool Descriptografar(){ FILE *arquivo; int valor; int pos_chave; int pos_texto; arquivo = fopen("c:\\cript\\arquivos_recebidos\\criptografado.txt","r"); if(arquivo==NULL){ return false; } pos_chave = 0; pos_texto = 0; while(!feof(arquivo)){ fscanf(arquivo,"%d",&valor); valor /= CHAVE[pos_chave]; TEXTO[pos_texto] =(char)valor; pos_texto++; if(pos_chave==TAM_CHAVE-1){ pos_chave = 0; }else{ pos_chave++;} } fclose(arquivo); return true; } // ------------- Menus ---------------// void Recebe_texto(char tipo[]){ char aux[TAM_TEXTO]; char pause; bool ok; FILE *arquivo; char palavra[100]; if(strcmp(tipo,"msg")==0){ printf("\n\nReceber Texto para criptografar\n\n"); printf("\n\nDigite o texto: "); gets(aux); if(strlen(aux) <= TAM_TEXTO){ strcpy(TEXTO,aux); printf("\n\nTexto recebido com sucesso\n\n"); printf("\n\nCriptografando texto...\n\n"); ok = true; }else{ printf("\n\nErro!\n Tamanho do texto excede o limite de caracteres\n\n"); ok = false; system("pause"); } }else if(strcmp(tipo,"arquivo")==0){ printf("\n\tInstrucoes para importar um arquivo texto"); printf("\n\n 1 - Renomeio o arquivo para original.txt"); printf("\n\n 2 - Copie o arquivo para a pasta que sera aberta a seguir)"); printf("\n\n 3 - Feche o explorador e retorne a aplicacao"); printf("\n\n Pressione enter para abrir a pasta"); scanf("%c", &pause); setbuf(stdin,NULL); system("explorer c:\\Cript\\arquivos_originais\\"); printf("\n\n Pressione enter apos colar o arquivo na pasta...\n"); scanf("%c", &pause); setbuf(stdin,NULL); printf("\n\n Importanto arquivo...\n\n"); arquivo = fopen("c:\\Cript\\arquivos_originais\\original.txt","r"); if(arquivo==NULL){ printf("\n\n Erro ao abrir o arquivo..\n\n"); }else{ while(!feof(arquivo)){ fscanf(arquivo,"%s",palavra); strcat(aux," "); strcat(aux,palavra); } fclose(arquivo); if(strlen(aux) <= TAM_TEXTO){ strcpy(TEXTO,aux); printf("\n\nTexto recebido com sucesso\n\n"); printf("\n\nCriptografando texto...\n\n"); ok = true; }else{ printf("\n\nErro!\n Tamanho do texto excedo o limite de caracteres\n\n"); ok = false; system("pause"); } } }else{ printf("\n\nErro ao receber texto\n\n"); } if(ok){ if(Criptografar()){ printf("\n\nTexto criptografado com sucesso\n\n"); arquivo = fopen("c:\\cript\\arquivos_gerados\\criptografado.txt","wt"); if(arquivo==NULL){ printf("\n\n Erro ao criar o arquivo..\n\n"); }else{ for (int i=0; i<strlen(TEXTO); i++){ fprintf(arquivo,"%d ",TEXTO_CRIPT[i]); } } fclose(arquivo); printf("\n\nPressioner enter para abrir a pasta do arquivo gerado \n\n"); scanf("%c", &pause); setbuf(stdin, NULL); system("explorer c:\\cript\\arquivos_gerados\\"); }else{ printf("\n\nNao foi possivel criptografar o texto\n\n"); } } } void Receber_Arquivo_cript(){ char pause; printf("\n\tInstrucoes para importar um arquivo criptografado"); printf("\n\n 1 - Renomeie o arquivo para criptografado, mantendo sua extensao original"); printf("\n\n 2 - Copie o arquivo para a pasta que sera aberta a seguir)"); printf("\n\n 3 - Feche o explorador e retorne a aplicacao"); printf("\n\n Pressione enter para abrir a pasta"); scanf("%c", &pause); setbuf(stdin,NULL); system("explorer c:\\Cript\\arquivos_recebidos\\"); printf("\n\n Pressione enter apos colar o arquivo na pasta...\n"); scanf("%c", &pause); setbuf(stdin,NULL); printf("\n\n Importanto arquivo...\n\n"); if(Descriptografar()){ printf("\n Arquivo descriptografado com sucesso\n"); system("pause"); system("cls"); printf("\n%s\n\n",TEXTO); system("pause"); }else{ printf("\n Nao foi possivel descriptografar o arquivo\n");} } void Menu_Criptografar(){ int opcao; printf("\n\tCriptografia de dados"); printf("\n\nCriptografar texto ou arquivo"); printf("\n\n 1 - Digitar texto"); printf("\n\n 2 - Importar arquivo (txt)"); printf("\n\n 3 - Voltar ao menu princiapl"); printf("\n\n Informe a opcao desejada: "); scanf("%d", &opcao); setbuf(stdin, NULL); switch(opcao){ case 1: system("cls"); Recebe_texto("msg"); break; case 2: system("cls"); Recebe_texto("arquivo"); break; case 3: break; default: printf("Opcao invalida! Tente novamente..."); } } void Menu(){ char chave[500]; int opcao; while(1){ // while 1(um) é igual a infinito system("cls"); printf("\n\tCriptografia de dados"); printf("\n\n 1 - Criptografar Texto"); printf("\n\n 2 - Receber arquivo"); printf("\n\n 3 - Configurar Chave"); printf("\n\n 4 - Sair"); printf("\n\n Informe a opcao desejada: "); scanf("%d", &opcao); setbuf(stdin, NULL); switch(opcao){ case 1: system("cls"); Menu_Criptografar(); break; case 2: system("cls"); Receber_Arquivo_cript(); break; case 3: system("cls"); printf("\n\nInforme a chave: "); gets(chave); if(set_chave(chave)){ printf("\n\n Chave modificada com sucesso!\n"); }else{ printf("\n\n Chave não pode ser modificada!\n"); } system("pause"); break; case 4: printf("\nFinalizando... \n\n"); system("pause"); exit(0); break; default: printf("Opcao invalida! Tente novamente..."); } } } // ----------------------------------------------- int main() { set_chave("AbCd"); Menu(); system("pause"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Leonardo Prass
Eu gostaria que Alguém me ajuda-se a refinar este código e a colocar arquivo nele para poder ler um arquivo de texto ao invés de escrever uma frase só, e outra um menu que retornasse .
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.