Cifra de Cesar em C++
O desejo de enviar mensagens de forma segura sem que ninguém mais, a não ser o destinatário, consiga ler, é tão antigo quanto a invenção da escrita. Em guerras primitivas tem-se relato de generais que raspavam a cabeça de um escravo e sobre a cabeça escreviam mensagens secretas de guerra. Após o cabelo crescer, o emissário era enviado (esta técnica de esconder mensagens é chamada de esteganografia e sua versão moderna consiste em esconder mensagens em imagens ou músicas).
Basicamente existem duas formas primárias de obscurecer uma mensagem (criptografar), que pode ser pelo uso de substituição ou transposição. Na substituição troca-se alguma coisa por outra, de acordo com algum critério. Os passatempos encontrados em bancas de revistas exploram a substituição, onde o leitor é levado a descobrir que onde tem triângulo deve ser considerado a letra "A", por exemplo.
Já na transposição apenas troca-se as coisas de lugar. Usando transposição simples, pode-se escrever a palavra "teste" como "ettse", transpondo uma letra com a sua vizinha.
O método matemático de substituição para inviabilizar a leitura mais antigo que se tem registro é a cifra de César. Elaborada por Júlio César, esta cifra inaugurou as chamadas cifras de substituição monoalfabéticas.
Na infantil Cifra de César, cada letra do alfabeto é substituída pela sua terceira vizinha, ou seja, o "A" é transformado em "D", em um alfabeto circular, onde o "Z" vira "C" (...VWXYZABC...), conforme ilustrado na figura.
Nota-se aí a existência de duas operações distintas:
a) cifrar: para cifrar uma mensagem, deve-se substituir cada letra pela terceira vizinha subsequente. Em C usando string isto poderia ser feito com:
strCIF[i] = strTXT[i] + 3;
No entanto, um programador experiente verá erro na fórmula acima: ela só funciona até o "W" que somado com 3 virará "Z". Para as letras "X", "Y" e "Z" a fórmula é falha! Aí entraria em ação a operação de módulo, muito