Caixa enigma

Enigma

 

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:

 Cifczar

 

                                                                                                                               Cifra de César

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.

Exibe

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:

Exibe1

 

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:

Tabelaviginere

                                                                                                          Tabela de Deslocamentos

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.