Você está na página 1de 5

1/3/2014 MAC2166 Introducao a Computacao

http://www.ime.usp.br/~mac2166/ep1/ 1/5
Departamento de Cincia da Computao - IME - USP
MAC2166 Introduo Computao
Escola Politcnica - Primeiro Semestre de 2014
Primeiro Exerccio Programa Entrega: at 15 de maro de 2014 s
23h55m

O cdigo de Vigenre
"If you reveal your secrets to the wind, you should not blame the wind for revealing them to the trees."
Kahlil Gibran

Objetivos
O objetivo deste primeiro exerccio-programa familiarizar os alunos com o ambiente de
programao do Python e com o processo de entrega de exerccios-programa. O foco desse
primeiro EP utilizar operaes com nmeros inteiros.
Os EPs so uma forma de treinamento na resoluo de problemas computacionais. Para
aferirmos esse treinamento importante que as nicas construes --comandos, funes,
etc-- da linguagem Python que voc use em seu programa sejam as constantes dos enunciados
e as dadas em aula. Sempre que um aluno PRECISAR MUITO usar um comando no dado
em aula, d para perceber que a disciplina no conseguiu ensinar direito alguma coisa para ele.
Forar a usar s comandos dados em aula bom para ter essa avaliao do processo de
aprendizado.

Introduo
Um efeito curioso da inveno da escrita foi a necessidade de se inventar formas de esconder
a informao armazenada nos textos. A Criptografia um ramo da matemtica que estuda
tcnicas para transformar informao para uma forma "ilegvel". Nessa forma, s o destinatrio
prprio capaz de recuperar a informao por meio de uma "chave secreta" que torna
possvel decifrar o cdigo.
Uma informao no-cifrada enviada de uma pessoa (ou organizao) para outra chamada
de "texto claro" (plaintext). Cifragem o processo de converso de um texto claro para um
1/3/2014 MAC2166 Introducao a Computacao
http://www.ime.usp.br/~mac2166/ep1/ 2/5
cdigo cifrado e decifragem o processo contrrio, de recuperar o texto original a partir de
um texto cifrado. Na verdade, o estudo da criptografia cobre bem mais do que apenas
cifragem e decifragem. um ramo especializado da teoria da informao com muitas
contribuies de outros campos da matemtica e do conhecimento. A criptografia moderna
basicamente formada pelo estudo dos algoritmos criptogrficos que podem ser implementados
em computadores. [Texto adaptado da Wikipedia]
Uma das tcnicas mais simples de criptografia o cdigo de Csar, tambm conhecido
como cifra de Csar ou troca de Csar. Por esse mtodo, cada letra de um texto a ser
criptografado substituido por uma outra letra, transformada por meio de uma chave definida
por apenas uma letra. Para esse EP, vamos considerar que cada palavra na verdade um
nmero inteiro decimal, e portanto uma "letra" corresponde a um dgito entre 0 e 9 e a chave
composta por um nmero entre 0 e 9. Um nmero cifrado tem cada dgito transformado pela
seguinte frmula:
onde o i-simo dgito do cdigo cifrado, o correspondente i-simo dgito no
nmero, K a chave e o operador % corresponde ao resto da diviso inteira. Por exemplo:
O resultado de 32 % 10 2.
O resultado de 3 % 5 3.
O resultado de 12 % 6 0.
Assim, o nmero N = 3478 cifrado usando a chave K = 5 seria codificado como o nmero C
= 8923.
Para decifrar o cdigo, cada dgito do cdigo cifrado transformado pela frmula:
onde corresponde ao i-simo dgito do cdigo decifrado. Observe que o nmero
codificado C = 8923 decifrado corretamente como D = 3478 usando K = 5.
A simplicidade do mtodo de Csar permite que as cifras geradas sejam decifradas facilmente
por um intruso (sejam quebradas) pois cada dgito (ou letra) sempre sofre a mesma
transformao. Para tornar o cdigo mais difcil de decrifrar, Giovan Batista Belaso descreveu
em seu livro datado de 1553 um mtodo que se utiliza de uma chave mais complexa que, no
caso desse EP, ser constituda de um inteiro composto por vrios dgitos. Esse mtodo no
entanto erroneamente atribudo a Blaise de Vigenre, que foi o autor de uma cifra ainda mais
robusta [veja mais detalhes na Wikipedia].
A idia do mtodo usar os dgitos da chave mais complexa de forma circular para codificar
os dgitos do nmero a ser cifrado. Como os dgitos da chave variam, a unicidade da
transformao entre um dgito e sua cifra deixa de existir. Alm disso, o uso dos dgitos da
chave de forma circular permite a codificao de nmeros de tamanho arbitrrio.
EXEMPLO:
Para usar a chave mais complexa, a chave deve ser alinhada com o nmero e repetida quantas
1/3/2014 MAC2166 Introducao a Computacao
http://www.ime.usp.br/~mac2166/ep1/ 3/5
vezes forem necessrias para codificar todos os dgitos do nmero. Assim, para N = 23456 e
K = 79 o nmero cifrado seria C = 10325 pois:
O dgito 9 de K usado para cifrar o dgito 6, gerando a cifra 5.
O dgito 7 de K usado para cifrar o dgito 5, gerando a cifra 2.
Como no h mais dgitos de K, a forma circular implica que a chave deve ser repetida
para que o dgito 9 seja usado para cifrar o dgito 4, gerando a cifra 3.
O dgito 7 usado para cifrar o dgito 3, gerando a cifra 0.
A chave repetida novamente e o dgito 9 usado para cifrar o dgito 2, gerando a cifra
1.
Uma outra forma de entender o processo de repetio considerar que o nmero N = 23456
cifrado pela chave K' = 97979 (ou seja, a chave K' usada no clculo tem o mesmo nmero
de dgitos de N e formada por repeties de K).
Tarefa
Neste exerccio-programa, a sua tarefa ser escrever um programa em Python que apenas
cifra um nmero inteiro. O seu programa deve:
1. receber um nmero inteiro N > 0.
2. receber um nmero inteiro K > 0.
3. calcular e imprimir C, onde C a cifra de N usando o mtodo de Vigenre com a chave
K.
4. O seu programa dever finalizar depois de executar uma e somente uma vez os
passos de 1 a 3.
No devem ser feitas mais cifragens nem outras supostas melhorias no programa.
esperado que o usurio digite um inteiro correspondente a N e K e no entre com valores
indevidos (como um texto, um nmero real ou inteiro negativo).
Para corrigir o seu EP, vamos assumir que o seu programa obedece exatamente o que est
especificado no enunciado do EP. Tudo que fugir da especificao prejudicar a avaliao de
seu trabalho.
As nicas construes --comandos, funes, etc-- da linguagem Python que voc poder
usar em seu programa so as constantes deste enunciado e as dadas em aula.
Exemplos de execuo
Nos exemplos, considere que tudo que aparece em vermelho foi digitado pelo usurio.
Exemplo 1
Teste simples, como no mtodo de Csar:
O cdigo de Vigenre
Digite um nmero ......: 4579
1/3/2014 MAC2166 Introducao a Computacao
http://www.ime.usp.br/~mac2166/ep1/ 4/5
Digite o valor da chave: 3
O valor cifrado : 7802
Exemplo 2
Teste de chave maior que nmero:
O cdigo de Vigenre
Digite um nmero ......: 784312
Digite o valor da chave: 84312134
O valor cifrado : 96446
Exemplo 3
Teste qualquer:
O cdigo de Vigenre
Digite um nmero ......: 81751425134465672234567
Digite o valor da chave: 638165
O valor cifrado : 19816053299093737862622
Exemplo 4
Codificao com perda de informao (quando a crifra tem zeros esquerda)
O cdigo de Vigenre
Digite um nmero ......: 23123
Digite o valor da chave: 987
O valor cifrado : 0

Observaes
Antes de comear assista ao vdeo com o passo-a-passo da edio e submisso do
EP1 aqui.
Certifique-se de que o seu programa foi realmente depositado no site verificando se
voc recebeu um e-mail com a confirmao da entrega.
Leia as INFORMAES SOBRE ENTREGA DE EPs antes de entregar o seu
EP.


1/3/2014 MAC2166 Introducao a Computacao
http://www.ime.usp.br/~mac2166/ep1/ 5/5