Criptografia do Quadrado de Polybius em Python

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como implementar o algoritmo de criptografia do quadrado de Políbio (Polybius square). O quadrado de Políbio é uma grade 5x5 que mapeia cada letra do alfabeto inglês para um par de coordenadas. Ao criptografar texto usando este método, você pode criar uma mensagem codificada que só pode ser descriptografada por alguém com conhecimento do quadrado de Políbio.

👀 Pré-visualização

## Exemplo 1
text = "tynam"; encryption_text = "4454331132"
## Exemplo 2
text = "tynam123"; encryption_text = "4454331132123"
## Exemplo 3
text = "TYnam"; encryption_text = "4454331132"
## Exemplo 4
text = None; encryption_text = None

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como definir o quadrado de Políbio
  • Como remover espaços e converter texto para minúsculas
  • Como lidar com entrada vazia ou None
  • Como criptografar texto usando o quadrado de Políbio
  • Como retornar o texto criptografado

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Compreender o conceito do algoritmo de criptografia do quadrado de Políbio
  • Implementar o algoritmo de criptografia de Políbio em Python
  • Criptografar e descriptografar texto usando o quadrado de Políbio
  • Lidar com vários cenários de entrada, incluindo entrada vazia ou None

Remover Espaços e Converter para Minúsculas

Nesta etapa, você aprenderá como preparar o texto de entrada para criptografia, removendo espaços e convertendo todos os caracteres para minúsculas.

  1. Abra o arquivo polybius.py no seu editor de código.
  2. Adicione o seguinte código à função polybius_encryption():
## Remove spaces and convert to lowercase
text = text.replace(" ", "").lower()

Isso removerá quaisquer espaços no texto de entrada e converterá todos os caracteres para minúsculas.

✨ Verificar Solução e Praticar

Tratar Entradas Vazias ou None

Nesta etapa, você aprenderá como lidar com o caso em que o texto de entrada está vazio ou é None.

  1. Adicione o seguinte código no início da função polybius_encryption():
if text is None:
    return None

if text == "":
    return None

Isso garantirá que a função retorne None se o texto de entrada for None ou uma string vazia.

  1. Após concluir esta etapa, o código é mostrado abaixo:
def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## Remove spaces and convert to lowercase
    text = text.replace(" ", "").lower()

    if text == "":
        return None
✨ Verificar Solução e Praticar

Configurar o Quadrado de Políbio

Nesta etapa, você aprenderá como definir o quadrado de Polybius, que é uma grade 5x5 contendo as 26 letras do alfabeto inglês.

  1. Após as etapas anteriores, defina o quadrado de Polybius como uma lista de listas, onde cada lista interna representa uma linha do quadrado:
polybius_square = [
    ["a", "b", "c", "d", "e"],
    ["f", "g", "h", "ij", "k"],
    ["l", "m", "n", "o", "p"],
    ["q", "r", "s", "t", "u"],
    ["v", "w", "x", "y", "z"],
]

Este quadrado de Polybius será usado para mapear as letras no texto de entrada para suas coordenadas correspondentes.

✨ Verificar Solução e Praticar

Criptografar o Texto

Nesta etapa, você aprenderá como criptografar o texto de entrada usando o quadrado de Polybius.

  1. Após as etapas anteriores, adicione o seguinte código à função polybius_encryption():
encrypted_text = ""

for char in text:
    if char.isalpha():
        for i, row in enumerate(polybius_square):
            for j, ch in enumerate(row):
                if char in ch:
                    encrypted_text += str(i + 1) + str(j + 1)
    else:
        encrypted_text += char

Este código itera sobre cada caractere no texto de entrada. Se o caractere for uma letra, ele encontra as coordenadas correspondentes no quadrado de Polybius e as anexa à string encrypted_text. Se o caractere não for uma letra, ele é adicionado à string encrypted_text como está.

✨ Verificar Solução e Praticar

Retornar o Texto Criptografado

Nesta etapa final, você aprenderá como retornar o texto criptografado da função polybius_encryption().

  1. Adicione a seguinte linha no final da função polybius_encryption():
return encrypted_text

Isso retornará o texto criptografado como a saída da função.

Agora, a função polybius_encryption() completa deve ser semelhante a esta:

def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## Remove spaces and convert to lowercase
    text = text.replace(" ", "").lower()

    if text == "":
        return None

    ## Define the Polybius square
    polybius_square = [
        ["a", "b", "c", "d", "e"],
        ["f", "g", "h", "ij", "k"],
        ["l", "m", "n", "o", "p"],
        ["q", "r", "s", "t", "u"],
        ["v", "w", "x", "y", "z"],
    ]

    encrypted_text = ""

    for char in text:
        if char.isalpha():
            for i, row in enumerate(polybius_square):
                for j, ch in enumerate(row):
                    if char in ch:
                        encrypted_text += str(i + 1) + str(j + 1)
        else:
            encrypted_text += char

    return encrypted_text


if __name__ == "__main__":
    txt = input()
    print(polybius_encryption(txt))

Você concluiu a implementação do algoritmo de criptografia de Polybius. Você pode testar seu código executando o arquivo polybius.py e fornecendo o texto de entrada a ser criptografado.

  1. Execute o arquivo polybius.py e forneça o texto de entrada a ser criptografado.
python3 polybius.py
  1. Observe a saída do texto criptografado.
## Example 1
text = "tynam"; encryption_text = "4454331132"
## Example 2
text = "tynam123"; encryption_text = "4454331132123"
## Example 3
text = "TYnam"; encryption_text = "4454331132"
## Example 4
text = None; encryption_text = None

Parabéns! Você implementou com sucesso o algoritmo de criptografia de Polybius em Python.

✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.