criptografia

1. criptografia

alexandre menna
alexandreM2018

(usa Arch Linux)

Enviado em 18/04/2018 - 23:34h

Olá amigos, gostaria de ajuda para esse problema, screver um programa, em linguagem C, que permita decifrar um determinado texto, escrito em língua portuguesa e que foi cifrado por um método de substituição mono-alfabético.
A tarefa será executada sem se conhecer a chave de substituição que deu origem ao texto cifrado.

A técnica para realizar o ataque tem como base a análise estatística dos caracteres da língua portuguesa. Por exemplo, o carácter que aparece mais vezes num texto de língua portuguesa é o a. Então, o símbolo que aparecer mais vezes na mensagem cifrada terá que corresponder ao original a. O segundo símbolo com maior frequência é o e e pela mesma lógica o símbolo com a segunda maior taxa de ocorrência na mensagem
cifrada corresponderá à letra original e. Para que este método de ataque funcione, o texto a decifrar terá que ser suficientemente longo.
O texto a decifrar:

cscmxcszfsocmfzscssjncwcgfspezgcfkjgznvcwbmcjcwesjvcncbfmxcmzsnenkcgzcnvzsncazicgfsbcsscmcxcjngccwzxgcvcbmfocnczxbzmjifsziezmmcszsrfmkcgfsxcjsgfpezbmfxzvjccrfmkchexcnczznvmziznvzmzxfvczgjrjkcmcxnfafmzjnfpezvcnvfseowjxcmcxzvcxozxcsxzxfmjcsiwfmjfscsgcpezwzsmzjspezrfmcxgjwcvcngfcrzfjxbzmjfzcsvzmmcsajkjfscsgzcrmjkczgzcsjccngcmcxgzacsvcngfzcpezwzspezbfmfomcsacwzmfscsszacfgcwzjgcxfmvzwjozmvcngfkcnvcngfzsbcwhcmzjbfmvfgcbcmvzszcvcnvfxzcyegcmfzniznhfzcmvzkzsszxgfscojfimzifzgfvmfjcnfcsncazickfzsimcngzspezrjqzmcxkcwzszgzcwztcngmfzgzvmcycnfcrcxcgcsajvfmjcspezvjazmcxpezzekcnvffbzjvfjwesvmzwesjvcnfcpezxnzbvenfzxcmvzfozgzkzmcxkzsszvegffpezcxesccnvjickcnvcpezfevmfacwfmxcjscwvfszcwzacnvczafsvcijgzsxjnhcsbfjskmjcgfvzngzszxxjexnfafzniznhfcmgznvzszszxbmzzxazmsfhexjwgzkzwzomcgfrfjgzxjafssfmjfcwzmzxznvzgcjxzcifmcexsfxcwvfzseowjxcgfexzsvjwfimcngjwfkfzkfmmznvzbfmpezgzafsscsciecsrzoffmgznzpezncfvznhcxznazyccsgzhjbfkmznzgcjxzecremjcimcngzzsfnfmfsczncfgzcimzsvzcazncfermcevcmegcxcsgzveockcnfmczozwjkfscpezfbzjvfckzngzzckfmcfizsvfxegcgcjxzjiecwkcnvfcfsrzjvfsgcrcxfsciznvzafsscpezcxcmvzvcnvfcyegcpezszzsbcwhzzszkcnvznfenjazmsfszvcfseowjxzbmzkfkcozzxazmsfzafsfozxncskjgcsziemcnkcgcwesjvcnccnvjicwjozmgcgzzncfxznfskzmvjssjxczsbzmcnkcgzcexznvfgcbzpeznckmjsvcngcgzafsfnfafvzxfmgcxcemcwcnkcxcmcajwhcrcvcwgcnfsscjgcgzgcgccfxengfbfmgzespezvfgffxcngzbzmcgfxengfcgzesgcmbcmvzimcngz

Tenha em atenção que, para simplificação, o texto fornecido não contém espaços, nem caracteres acentuados, nem caracteres de pontuação. Assim, o programa escrito em linguagem C não deverá apresentar o texto decifrado com espaços, nem com caracteres acentuados e nem com
caracteres de pontuação.


Para se construir o programa suponha-se que a sequência seguinte apresenta a ordem decrescente (da esquerda para a direita) da frequência dos caracteres na língua portuguesa:
a e o s r d n i t m u l c v p g q b f h j x z k y w
Já fiz o menu que é assim.

#include <iostream>
#include <stdlib.h>
#include <string.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

char CHAVE []="wmatkzinlbhxgpefcjosqrvduy";

int TAM_CHAVE=strlen(CHAVE);


void Descriptografar (){

}


void Menu(){
int opcao;
while(1){
system ("cls");
printf ("\n\tcrioptografia de dados: ");
printf ("\n\n 1 Recebe Arquivo para descriptografar: ");
printf ("\n\n 2 Sair");
printf ("\n\n Informe a opacao desejada: ");
scanf("%d",&opcao);
setbuf (stdin,NULL);
switch (opcao){
case 1:
system ("cls");
Descriptografar ();

break;


case 2:
printf ("\nFinalizado....\n\n");
system ("pause");
exit(0);
break;
default:
printf ("Opção invalidade, tente novamente");
}
}

}






int main(){



Menu ();

return 0;


}








  


2. Re: criptografia

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/04/2018 - 01:05h

Menu para quê? Não perca tempo fazendo o que o enunciado não pede.

E como você não fez mais nada além do menu nem fez nenhuma pergunta específica, não resta muita coisa a ser dita sobre seu programa.


3. Re: criptografia

alexandre menna
alexandreM2018

(usa Arch Linux)

Enviado em 19/04/2018 - 07:56h

sim vc ta certo amigo, mas teria alguma diga de como fazer a leitura e ordenação das letras as letras que mas são por freguencia em portuguesa é A: E: O: S: R: I: N: D: M: U: T: C: L: P: V: G: H: Q: B: F: Z: J: X: K: Y: W:


4. Re: criptografia

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/04/2018 - 12:55h

A estrutura de dados mais simples que permite a definição de uma ordem é array (também chamado de vetor em alguns contextos).

A ordem dos elementos de um array pode ser determinada por você. Dependendo do caso, a ordem pode não ter valor nenhum, pode ter um valor semântico (por exemplo, um array que contém uma string de texto como "Paulo" precisa que seus elementos tenham a ordem que têm), podem ter valor cronológico (o mais antigo vem primeiro, ou o contrário), pode ter a ver com uma possível diferença no valor relativo de seus elementos (por exemplo, um array contendo letras do alfabeto poderia ser ordenado de acordo com a ordem alfabética dessas letras) ou pode até mesmo ter a ver com a frequência em que cada elemento ocorre (soa familiar?).

Outra coisa que você pode ter em mente é que a ordem dos elementos de um array pode ser mudada (e às vezes é isso mesmo que você deseja fazer — entendeu?). Por exemplo, você pode construir o array com uma ordem baseada em um critério, e depois reordená-lo com base em outro critério, a fim de utilizá-lo para produzir novos resultados, que mais efeicientes, quer de transformação sobre os dados.

Acho que já dei dicas suficientes. Espero que você as aproveite.


5. Meu código está pegando a posição das letras, agora não sei fazer em vez de mostra o numero, sim mos

alexandre menna
alexandreM2018

(usa Arch Linux)

Enviado em 19/04/2018 - 15:48h

void cript(char pl[]){
char chave []= "wmatkzinlbhxgpefcjosqrvduy";
char Afre[] = "a e o s r d n i t m u l c v p g q b f h j x z k y w";

system("cls");
printf("CRIPTOGRAFADO: ");
for (int i=0; i<strlen(pl); i++){
if (pl[i] == ' '){
printf(" ");
}
for (int j=0; j<strlen(chave); j++){
if ((pl[i] == chave[j]) || (pl[i] == Afre[j]))
{
printf("[%d]",j+1);
}
}
}
}


int main(){
char palavra[25];

printf("Informe a palavra: ");
gets(palavra);

cript(palavra);

fflush(stdin);
getchar();
}



6. Re: criptografia

alexandre menna
alexandreM2018

(usa Arch Linux)

Enviado em 19/04/2018 - 15:50h

como faço para mostrar a letra correspondente a letra que foi digitada, e não a posição onde ela se encontra? e depois ordenar elas

void cript(char pl[]){
char chave []= "wmatkzinlbhxgpefcjosqrvduy";
char Afre[] = "a e o s r d n i t m u l c v p g q b f h j x z k y w";

system("cls");
printf("CRIPTOGRAFADO: ");
for (int i=0; i<strlen(pl); i++){
if (pl[i] == ' '){
printf(" ");
}
for (int j=0; j<strlen(chave); j++){
if ((pl[i] == chave[j]) || (pl[i] == Afre[j]))
{
printf("[%d]",j+1);
}
}
}
}


int main(){
char palavra[25];

printf("Informe a palavra: ");
gets(palavra);

cript(palavra);

fflush(stdin);
getchar();
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts