Codificando e decodificando sua própria mensagem

Estevão Naval
5 min readJan 1, 2021

--

Dicionários criados por crianças

Introdução

Fala devs! Beleza? Muita pessoas, na infância, adoravam brincar de linguagem. Quem nunca ouviu ou falou a “língua do P”, ou escreveu um próprio dicionário com letras e símbolos trocados?

Mesmo você não tendo jogado isto, é fato que estas “brincadeiras” são muito importantes e úteis, além de já servirem como inteligência militar em muitas guerras.

Pois bem, com algumas ferramentas do python, é possível manipular caracteres a fim de mudar o significado de letras, números e símbolos por outros totalmente diferentes. Então, vamos lá?

Ferramentas utilizadas

Iniciando, vou explicar um pouco sobre cada instrumento que vamos usar. Não há necessidade de importar nada, visto que tudo já faz parte da biblioteca nativa do python.

Função maketrans()

Basicamente, a função maketrans() pode receber até três parâmetros. Para este artigo, nós só vamos utilizar dois. Porém, para título de curiosidade, o terceiro parâmetro permite excluir certos caracteres passados da string original. Independente da quantidade de parâmetros passados, o método maketrans() retorna uma estrutura de dados map.

Map

Map é uma estrutura de dados em que uma string (chave) é utilizada para retornar um outro valor (valor) qualquer, podendo ser outra string, um inteiro, lista, etc.

Em outras linguagens de programação e mesmo em python, o map pode ser tido como outras estruturas de dados como hashtable ou dicionário.

Se você quer saber mais sobre estas estruturas, eu recomendo a esta sequência de artigos sobre as principais estruturas de dados que utilizamos no nosso dia-a-dia de desenvolvedor:

Função translate()

É com a função translate() que vamos, efetivamente, traduzir o que queremos com base no nosso dicionário personalizado. Para isto, o método translate() recebe o parâmetro contendo o map e retorna a nova string com os valores trocados. Vamos ter um exemplo prático na parte na parte de implementação.

Implementação

Com todos os instrumentos que vamos usar em mãos, podemos começar a implementação do nosso dicionário. Nosso objetivo é criar um novo arquivo baseado em um outro arquivo com nossa mensagem. Porém, este novo arquivo será codificado de acordo com a correspondência de uma letra, número ou símbolo com outro de nossa escolha. Por exemplo, “a” se relacionando com “f” ou “b” se relacionando com “9”.

Manipulando o texto que queremos codificar

Para começar, vamos utilizar um arquivo .txt contendo uma mensagem que queremos codificar. O nome do arquivo é mensagem.txt e a mensagem dentro dele será o poema do exílio de Gonçalves Dias. Veja o arquivo abaixo:

O arquivo mensagem.txt contendo o poema

Tendo já criado isto, vamos montar a estrutura básica para manipular o nosso arquivo mensagem.txt. Veja o código abaixo:

Estrutura básica do código para manipularmos os arquivos

Veja que não é meu objetivo ensinar como trabalhar com arquivos em python, mas gostaria de mostrar que o for..in… serve para passar linha por linha e a função arqvMsgCript.write(linha+“\n”) escreve a string linha dentro do arquivo mensagemCodificada.txt. Se você ainda não sabe como trabalhar com python, recomendo este artigo:

Criando nossa cadeia de caracteres personalizadas

Pois bem, vamos criar uma variável do tipo string contendo os símbolos originais que iremos usar. As letras que eu vou utilizar estarão entre “a” e “r”, mas você pode colocar qualquer símbolo em qualquer ordem. Veja o exemplo abaixo:

Agora, vamos colocar os caracteres que queremos que correspondam aos originais. Lembre-se de colocar a string com o mesmo tamanho da original. Então, ficará assim:

Vale ressaltar que a função maketrans() é case sensitive. Isto significa que ela diferencia letras maiúscula das minúsculas, portanto, tenha o cuidado de diferenciar as letras maiúsculas e minúsculas das suas strings.

Criando nossa estrutura map e traduzindo nosso código

Finalizando, vamos inserir nossa função maketrans() que vai receber, respectivamente, nossa cadeia de caracteres originais e nossa cadeia personalizada. Veja como fica:

Combinando com esta função, vamos utilizar o translate(). Este vai receber o map contido na variável dicionarioPersonalizado, e retornar a nova string codificada. Observe o código abaixo:

Terminado tudo isto, você vai ter o seguinte código:

Finalizando

Feito todos estes processos, você já pode executar o código completo. Se tudo der certo, o script vai criar uma novo arquivo chamado mensagemCodificada.txt traduzido de acordo com os caracteres que você escolheu. Note como o novo arquivo ficou:

No caso de você querer decodificar a sua mensagem, basta inverter a ordem das variáveis na passagem de parâmetro da função maketrans(). Além disto, você também pode ver este código completo no meu repositório do Github. Segue o link:

--

--

Estevão Naval
0 Followers

Um ser estudioso, amante dos livros e um sedento por oportunidades