A criptografia é uma vertente muito famosa da computação. Ela é de extrema importância uma vez que informações são, a cada dia, mais valiosas. O exemplo mais famoso de a aplicação da criptografia em posições estratégicas é o da maquina enigma, que ganhou muita visibilidade após o lançamendo do filme The Imitation Game que retrata um pouco da história de Alan Turing e do surgimento da computação. Outro exemplo não tão conhecido é a cifra de César, criada pelo imperador romano Júlio César. Agora que sabemos o quão importante e poderosa é a criptografia, que tal construirmos a nossa própria máquina enigma utilizando a cifra de César?
Índice
- 1 Versão 1:Cifra de César
- 1.1 Criptografando
- 1.2 Descriptogranfado
- 2 Versão 2: Caixa enigma com Cifra de Vigenère
- 2.1 Criptografando
- 2.2 Descriptografando
Versão 1:Cifra de César
Antes de realizar a criptografia devemos entender a ideia por trás da cifra de César. A cifra de César considera uma chave, onde, essa é o número de deslocamento em relação ao alfabeto. Veja o quadro a baixo para deixar mais claro:
Agora vamos tomar um exemplo:
- Considerando deslocamento igual a 4
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D | | | | - - - - A B C D E F G H I J K L M N O P Q R S W T U V X Y Z
- Logo se a mensagem for:
Prossiga Programando
- A mensagem godificada será:
Tvswwmke Tvskveqerhs
Agora já podemos realizar a criptografia.
Criptografando
Para criptografar a mensagem devemos considerar a ideia citada acima. Iniciaremos vasculhando a mensagem texto e verificando se cada letra corresponde a uma letra do alfabeto. Sendo todos os caracteres pertencentes então devemos passar pra o próximo estágio. Ao iniciar a criptografia, devemos atribuir a letra somada de sua chave, á respectiva posição da letra no vetor de caracteres que constitui a mensagem. Fazendo:
... for (letra='a'; letra<='z'; letra++) { while(i<=tam) { if(texto[i] == letra) { // se letra+chave passar de 'z' deve-se voltar para 'a' texto[i]=letra+chave; i++; cont ++; letra='a'; } ...
Após isso devemos exibir para o usuário a mensagem criptografada.
Salve a mensagem em um arquivo .txt ou .bin para que você possa descriptografar.
Descriptogranfado
Agora para realizar a descriptografia primeiramente devemos recuperar a mensagem criptografada do arquivo. Após isso fazemos a leitura da chave. Posteriormente, percorremos o vetor de caracteres,como no processo de criptografia, só que dessa vez devemos subtrair o valor da chave.
Ao termino do processo exibimos a mensagem criptografada e a mensagem descriptografada para o usuário:
Versão 2: Caixa enigma com Cifra de Vigenère
A segunda versão da caixa enigma é baseada na cifra de Vigenère , que por sua vez é baseada na cifra de César. O método utilizado por Viginère funciona com uma palavra chave com o mesmo tamanho da mensagem, onde cada letra da da chave é utilizada como deslocamento. Uma maneira mais fácil de visualizar o deslocamento para cada uma das letras é construindo uma tabela:
A partir da tabela podemos simular um exemplo:
- Suponhamos que a chave que codifica nossa mensagem seja “key” e nossa mensagem seja “abc”:
1-Interação:
Codificamos a considerando o deslocamento k: - a b c | k e y - - // a b c d e f g h i j k l m n o p q r s t u v w x y z | // k l m n o p q r s t u v w x y z a b c d e f g h i j - Assim a é substituída por k no processo de codificação.
2-Interação:
Codificamos b considerando o deslocamento e: - a b c | k e y - - // a b c d e f g h i j k l m n o p q r s t u v w x y z | // e f g h i j k l m n o p q r s t u v w x y z a b c d - Assim b é substituída por f no processo de codificação.
3-Interação:
Codificamos c considerando o deslocamento y: - a b c | k e y - - // a b c d e f g h i j k l m n o p q r s t u v w x y z | // y z a b c d e f g h i j k l m n o p q r s t u v w x - Assim c é substituída por a no processo de codificação.
Resultado:
Ao termino do processo teremos a mensagem codificada: kfa.
Agora que vimos o funcionamento do processo de criptografia da cifra de Vigenère podemos começar a construção da segunda versão da caixa enigma.
Criptografando
Como foi visto anteriormente, para criptografar a mensagem levamos em consideração o deslocamento dado pelas letras de sua chave. Cada letra da mensagem deve possuir uma letra de deslocamento da chave. Considerando o seguinte exemplo:
- MENSAGEM: ATACARBASESUL
- CHAVE:LIMAO
Observe que o tamanho da chave é menor que o tamanho da mensagem. Quando isso acontece devemos completar a chave através da concatenação com ela mesma, até que atinja o tamanho da mensagem:
ATACARBASESUL ||||||||||||| LIMAOLIMAOLIM
OBS: Repare que no final as letras da palavra chave foram inseridas até alcançar o tamanho da mensagem.
Após “normalizar” a chave devemos nos concentrar realmente no processo de criptografia. A forma de criptografar se assemelha muito ao método anterior, inclusive no laço de repetição. Entretanto devemos acrescentar alguns pontos que não foram levados em consideração no processo anterior:
- A chave muda para cada letra.
- Temos no máximo o deslocamento de tamanho 25(considerando a como 0 e z como 25).
Para abranger esses pontos devemos alterar a forma que calculamos as letras para o seguinte modo:
…
for (letra='a'; letra<='z'; letra++) { while(i<=tam) { if(texto[i] == letra) { texto[i] = tamanho_do_caracter + (((letra+chave[i])%tamanho_do_caracter)%26)
…
Veja que o valor da chave varia a cada interação de acordo com índice “i”, que por sua vez é maior ou igual ao tamanho da mensagem. Outro aspecto importante é módulo de 26, que garante a obtenção de valores de 0 a 25.
OBS: O tamanho do caracter diz respeito a letrar maiúsculas e minusculas e o modulo do tamanho garante a “corretude” do valor uma vez que ao tomarmos, por exemplo, a soma de 97 e 99(a + c) o resultado apenas pelo modulo de 26 será 14 o que está incorreto.
Descriptografando
Assim como no processo anterior, o processo de descriptografar sofrerá uma alteração no calculo dos caracteres, sendo a nova formula:
texto[i]= tamanho_do_caracter + (((letra - chave[i])%tamanho_do_caracter)+26)%26;
As observações feitas em relação ao tamanho do caracter e ao modulo de 26, no processo anterior, também são validas para esse processo.