Cifra de César (vários caracteres) - GregorioFornetti/CriPython GitHub Wiki
Vídeo tutorial
Caso goste de assistir vídeos tutorias, clique aqui para assistir um vídeo sobre a Cifra de César do modo vários caracteres.
Cifra de César - Vários caracteres
Esse tipo de cifra de césar utilizará outros caracteres além de letras para a encriptação/tradução. Será utilizado, nesse tipo de criptografia, 668 caracteres que estão representados na tabela unicode dos valores 32 a 126 e 161 a 734. Para encriptar uma mensagem o valor do caractere encriptado será igual a soma da chave com o valor do caractere atual da mensagem.
OBS 1: Para fazer a tradução de uma mensagem, a chave será adaptada para que todos caracteres encriptados voltem ao seu normal, e para isso a chave adaptada será igual a 668 - valor da chave antiga (ou seja, o valor da chave de tradução é o valor que faltava para a chave antiga completar 668). Isso funciona pois toda vez que um caractere "anda" 668 casas, ele volta a ser ele mesmo (toda vez que um novo valor passa do valor final, ele volta para o inicio, podendo assim, voltar a ser ele mesmo).
OBS 2: Os valores que os caracteres desse programa terão não serão exatamente iguais ao do unicode, já que existem alguns caracteres não imprimíveis. Esses valores passarão por um filtro que será explicado logo abaixo.
Filtro
Como pode ser visto na tabela unicode existem alguns caracteres que não podem ser imprimidos na tela (como por exemplo os valores de 0 a 31 do unicode), o que resultaria em um problema na encriptação/tradução, já que alguns caracteres poderiam ser perdidos. Para resolver isso, eles são ignorados como valores possíveis, portanto, a contagem começa pelo espaço (primeiro caractere imprimível) que tem valor unicode igual a 32, porém, por ser o primeiro imprimível, terá o valor igual a 0 no programa. Ou seja, para saber qual é o valor atual da letra que está sendo lida, basta pegar o seu valor unicode e subtrair pelo número de caracteres não imprimíveis antes dela. EX: A letra "a" tem valor unicode igual a 97, porém, existem 32 caracteres não imprimíveis antes dela, portanto ela vale 65 nesse programa (97 - 32).
Exemplos de funcionalidade
EX 1: Considerando a letra "a" que tem valor igual a 65 e a chave igual a 1, o valor encriptado será "b" que vale 66.
EX 2: Considerando a letra "a" e a chave igual a 30, o novo valor será igual a 95 que equivale ao caractere "¡" (161 - 34 - 32 = 95).
EX 3: Agora vamos fazer um exemplo de tradução. Considerando que a mensagem "a" foi encriptada com a chave 1 se transformando em "b", a chave de tradução será 667 (668 - 1 = 667). Agora aplicando essa nova chave em "b", o valor calculado passa do valor máximo (667 + 66 = 733, que passou do limite de 667), portanto, é preciso que esse valor seja corrigido, e para isso, ele é subtraído por 668 para voltar para o início da contagem, resultando em "a" (733 - 668 = 65 = "a").
Chaves disponíveis
As chaves disponíveis nesse modo são números inteiros positivos (igual á chave da cifra de césar apenas letras).
Algumas indicações
Para entender melhor essa opção de cifra, é interessante ler mais sobre a cifra de cesár(apenas letras) para compreender o funcionamento geral da cifra. Além disso, é interessante olhar o código de implementação da cifra que está disponível no arquivo "cifra_de_cesar.py", na pasta "Cifras".