Bóson Treinamentos em Ciência e Tecnologia

Implementando Cifra de César em Python – Criptografia

Implementando Cifra de César no Python - Criptografia

Implementando Cifra de César em Python – Criptografia

Neste tutorial vamos mostrar um algoritmo simples para implementação da famosa Cifra de César em Python.

Cifra de César

A Cifra de César é uma técnica de criptografia bastante simples e provavelmente a mais conhecida de todas.

Trata-se de um tipo de cifra de substituição, na qual cada letra de um texto a ser criptografado é substituída por outra letra, presente no alfabeto porém deslocada um certo número de posições à esquerda ou à direita.

Por exemplo, se empregarmos uma troca de quatro posições à esquerda, cada letra é substituída pela letra que está quatro posições adiante no alfabeto, e nesse caso a letra A seria substituída pela letra E, a letra B por F, a letra C por G, e assim sucessivamente.

Código

A seguir temos o código utilizado em nosso programa. Esse código foi adaptado do livro “Hacking Secret Ciphers with Python“, que pode ser adquirido na Amazon ou lido on-line, sem custo.

# Cifra de César em Python
# Adaptado do livro "Hacking Secret Ciphers with Python", de Al Sweigart
# Licença Creative Commons Attribution-Noncommercial-Share Alike 3.0

# Solicitar o texto a ser encriptado ou decriptado
texto = input('Digite a mensagem a ser encriptada ou decifrada: ')
# Chave a ser utilizada
chave = int(input('Entre com o valor da chave (deslocamento): '))
# Determinar modo de operação (E = encriptar; D = decriptar)
modo = input('Escolha E para encriptar ou D para decriptar o texto: ')
# Conjunto de caracteres válidos no algoritmo
CARACTERES = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# Variável para armazenar o texto criptografado (ou decifrado)
convertido = ''
# Converter todo o texto em maiúsculas
texto = texto.upper()

# Código que será executado em cada caractere do texto:
for caractere in texto:
    if caractere in CARACTERES:
        num = CARACTERES.find(caractere)
        if modo == 'E':
            num = num + chave
        elif modo == 'D':
            num = num - chave
        # Manipular a rotação se o valor de num for maior do que o comprimento de CARACTERES ou menor que 0
        if num >= len(CARACTERES):
            num = num - len(CARACTERES)
        elif num < 0:
            num = num + len(CARACTERES)
        # Adicionar (concatenar) o caractere correspondente a num na variável convertido
        convertido = convertido + CARACTERES[num] 
    else:
        # Concatenar o caractere sem efetuar criptografia ou decifragem
        convertido = convertido + caractere

# Mostrar o texto encriptado ou decifrado na tela
if modo == 'E':
    print('O texto criptografado é ', convertido)
elif modo == 'D':
    print('O texto decriptado é ', convertido)
else:
    print('Opção inválida')

Funcionamento do Código da Cifra de César em Python

Neste programa nós declaramos três variáveis que receberão dados digitados pelo usuário: texto, chave e modo.

A variável texto irá receber a mensagem que será criptografada (ou decifrada), a variável chave recebe um número (convertido para inteiro) que determina qual será o deslocamento dos caracteres a ser empregado na criptografia, e a variável modo determina se o programa irá encriptar ou decriptar uma mensagem.

Em seguida declaramos a constante CARACTERES, que irá conter um string composta das letras do alfabeto – que são os caracteres válidos a serem utilizados no processo de cifragem e decifragem. Note que apenas caracteres do alfabeto latino estão sendo empregados, mas você pode acrescentar mais caracteres (como letras acentuadas ou números) se desejar.

Finalmente, declaramos a variável convertido, que irá armazenar o texto encriptado ou decriptado que será exibido para o usuário no final do processo.

Com a instrução texto = texto.upper(), a mensagem contida na variável texto é convertida totalmente para maiúsculas, de modo que seus caracteres correspondam exatamente com os caracteres contidos na constante CARACTERES.

Na sequência, entramos em um laço for que será executado para cada caractere contido na mensagem a ser encriptada ou decriptada. Se um caractere da mensagem for encontrado dentro da constante CARACTERES, será aplicado o método String.find(), (CARACTERES.find(caractere)), retornando a posição do caractere dentro da constante (ou seja, número do caractere no alfabeto), e armazenando esse número na variável num.

O valor do caractere será obtido então por um dos métodos seguintes:

Logo após temos um condicional if:

if num >= len(CARACTERES):
  num = num - len(CARACTERES)
elif num < 0:
  num = num + len(CARACTERES)
  convertido = convertido + CARACTERES[num] 
else:
  convertido = convertido + caractere

Com este condicional o número obtido é comparado com o comprimento do alfabeto empregado (usando a função len()).

Finalmente, a mensagem é exibida na tela com a função print():

if modo == 'E':
  print('O texto criptografado é ', convertido)
if modo == 'D':
  print('O texto decriptado é ', convertido)

Dependendo do modo escolhido a mensagem será diferente.

Testando o código

Vamos testar a cifra de César em Python efetuando a criptografia de uma frase qualquer. Por exemplo, vamos criptografar a frase “Quero uma pizza de calabresa“, usando uma chave de valor de deslocamento igual a 13:

Obtivemos o resultado “DHREB HZN CVMMN QR PNYNOERFN“. Vamos testar agora o processo inverso, decifrando essa mensagem com nosso script:

Como podemos ver na figura anterior, a mensagem foi decifrada corretamente ao fornecermos a chave de rotação utilizada (13) e o modo de decifragem (D).

É isso aí pessoal! Nos próximos tutoriais vamos mostrar como criar outros algoritmos interessantes com Python, incluindo uma implementação para a Cifra de Vigenère.

Até mais!

 

Sair da versão mobile