Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
prog2:cifras_de_baele [2023/03/22 19:55] – nicolui | prog2:cifras_de_baele [2023/04/05 17:19] (atual) – [Produto a ser entregue] nicolui | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Cifras de Beale ====== | ||
+ | |||
+ | De acordo com a lenda, no início do século XIX, um homem chamado Thomas J. Beale enterrou um tesouro no valor de milhões de dólares em algum lugar da Virgínia. Beale deixou três textos cifrados com um dono de hotel, Robert Morriss, antes de desaparecer, | ||
+ | O primeiro texto cifrado descreve o conteúdo do tesouro, enquanto os outros dois descrevem a localização exata do local de enterro. Apesar de muitas tentativas de decodificar as cifras, seu significado permanece um mistério até hoje. A Figura 1 abaixo mostra um dos textos cifrados. | ||
+ | |||
+ | | {{ : | ||
+ | | **Figura 1**: Texto cifrado de Beale | | ||
+ | |||
+ | |||
+ | Acredita-se que os textos cifrados foram criados usando um **livro cifra**, que é um tipo de criptografia que usa um livro ou texto pré-acordado como chave. Em um livro cifra, a mensagem em texto simples é primeiro convertida em números, e então cada número é usado para referenciar uma palavra ou frase específica no livro. A sequência resultante de palavras ou frases se torna o texto cifrado, como o exemplo da Figura 1. (Para mais detalhes, [[https:// | ||
+ | |||
+ | ====== Gerando as cifras ====== | ||
+ | |||
+ | Beale usou uma variante de um livro cifra. Ele escolheu um texto longo como **texto cifra**, numerou cada uma das palavras do texto sequencialmente, | ||
+ | |||
+ | Considere por exemplo o seguinte texto como **livro cifra**: | ||
+ | |||
+ | < | ||
+ | "Em 1892 o intelectual paranaense José Francisco da Rocha Pombo colocaria, no Largo Ouvidor Pardinho, a pedra fundamental da Universidade do Paraná. O projeto foi frustrado pelo Movimento Federalista que impediu a | ||
+ | criação da universidade.Vinte anos depois, em 1912, o estado contava com um reduzido número de intelectuais, | ||
+ | apenas nove médicos e quatro engenheiros, | ||
+ | disso, a Guerra do Contestado fez com que as vastas lideranças políticas se empenhassem pela criação de | ||
+ | uma universidade, | ||
+ | </ | ||
+ | |||
+ | Usando a ideia de Beale, (considerando que apenas **espaço** e **linefeed** (mudança de linha) são usados para separar palavras) teríamos **arquivo de chaves** abaixo, em que cada linha contém 2 campos separados por **‘:’** . O segundo campo contém uma lista da posição de palavras cuja primeiro caracter é o caracter indicado no primeiro campo. | ||
+ | |||
+ | < | ||
+ | 1: 38 1 | ||
+ | a: 89 85 72 65 63 59 48 35 31 15 | ||
+ | c: 79 70 68 42 41 32 10 | ||
+ | d: 86 83 80 67 64 61 58 56 46 36 33 20 18 7 | ||
+ | e: 77 62 53 51 40 37 0 | ||
+ | f: 69 28 25 24 17 6 | ||
+ | g: 66 | ||
+ | i: 88 47 30 3 | ||
+ | j: 5 | ||
+ | l: 74 12 | ||
+ | m: 84 57 54 50 27 | ||
+ | n: 49 45 11 | ||
+ | o: 39 22 13 2 | ||
+ | p: 91 90 78 75 60 26 23 21 16 14 9 4 | ||
+ | q: 71 52 29 | ||
+ | r: 44 8 | ||
+ | s: 76 55 | ||
+ | u: 87 82 81 43 34 19 | ||
+ | v: 73 | ||
+ | </ | ||
+ | |||
+ | Usando os códigos acima, a frase **" | ||
+ | |||
+ | < | ||
+ | |||
+ | Ou ainda: | ||
+ | |||
+ | < | ||
+ | |||
+ | Note que no exemplo acima, algumas letras são representadas | ||
+ | |||
+ | ====== Implementação do Trabalho ====== | ||
+ | |||
+ | Escreva um programa em C que codifique e decodifique uma mensagem usando a cifra de Beale. O programa deverá ter as seguintes funcionalidades: | ||
+ | |||
+ | * Codificar uma mensagem qualquer contida em um arquivo ASCII usando um **livro cifra**. O programa deve ter uma opção de salvar em um arquivo texto as chaves | ||
+ | < | ||
+ | * Decodificar uma mensagem, usando um arquivo de códigos | ||
+ | < | ||
+ | * Decodificar uma mensagem usando o livro cifra | ||
+ | < | ||
+ | * Um exemplo de livro cifra pode ser encontrado [[ https:// | ||
+ | |||
+ | |||
+ | ====== Requisitos ====== | ||
+ | |||
+ | Tendo em vista que um caractere pode ter um número variável de chaves (dependendo do tamanho do livro cifra), você deve armazenar as chaves numa lista, a qual deve ser alocada dinamicamente. | ||
+ | Para o mesmo livro cifra e mensagem, o programa deve fornecer mensagens codificadas a cada execução. | ||
+ | |||
+ | |||
+ | ====== Estrutura do Código Fonte ====== | ||
+ | |||
+ | O projeto deve ter, além do arquivo '' | ||
+ | |||
+ | ====== Produto a ser entregue ====== | ||
+ | |||
+ | Deve ser entregue ao professor um arquivo //.tar// ou //.zip// contendo pelo menos: | ||
+ | |||
+ | * Arquivos '' | ||
+ | * Arquivo '' | ||
+ | * Os alvos '' | ||
+ | * CFLAGS = '' | ||
+ | * '' | ||
+ | * Compilar e ligar separadamente (gerar arquivos '' | ||
+ | * Arquivo '' | ||
+ | * Estes arquivos devem estar em um diretório de nome **< | ||
+ | * O nome do arquivo a ser entregue deve ser **< | ||
+ | * Os trabalhos devem ser entregues através do Moodle C3SL: | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | ====== Avaliação ====== | ||
+ | |||
+ | Os itens de avaliação do trabalho e respectivas pontuações são: | ||
+ | |||
+ | * Modularização e organização do código-fonte (15 pontos) | ||
+ | * Funcionamento: | ||
+ | * Eficiência: | ||
+ | |||
+ | **ATENÇÃO**: | ||
+ | |||