Cifrado del cuadrado de Polibio en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás cómo implementar el algoritmo de cifrado del cuadrado de Polibio. El cuadrado de Polibio es una cuadrícula de 5x5 que asigna cada letra del alfabeto inglés a un par de coordenadas. Al cifrar texto utilizando este método, se puede crear un mensaje codificado que solo puede ser descifrado por alguien que conozca el cuadrado de Polibio.

👀 Vista previa

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

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo definir el cuadrado de Polibio
  • Cómo eliminar espacios y convertir el texto a minúsculas
  • Cómo manejar entradas vacías o None
  • Cómo cifrar texto utilizando el cuadrado de Polibio
  • Cómo devolver el texto cifrado

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender el concepto del algoritmo de cifrado del cuadrado de Polibio
  • Implementar el algoritmo de cifrado de Polibio en Python
  • Cifrar y descifrar texto utilizando el cuadrado de Polibio
  • Manejar varios escenarios de entrada, incluyendo entradas vacías o None

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/strings -.-> lab-302701{{"Cifrado del cuadrado de Polibio en Python"}} python/conditional_statements -.-> lab-302701{{"Cifrado del cuadrado de Polibio en Python"}} python/for_loops -.-> lab-302701{{"Cifrado del cuadrado de Polibio en Python"}} python/lists -.-> lab-302701{{"Cifrado del cuadrado de Polibio en Python"}} python/function_definition -.-> lab-302701{{"Cifrado del cuadrado de Polibio en Python"}} python/data_collections -.-> lab-302701{{"Cifrado del cuadrado de Polibio en Python"}} end

Eliminar espacios y convertir a minúsculas

En este paso, aprenderás cómo preparar el texto de entrada para el cifrado eliminando los espacios y convirtiendo todos los caracteres a minúsculas.

  1. Abra el archivo polybius.py en su editor de código.
  2. Agregue el siguiente código a la función polybius_encryption():
## Eliminar espacios y convertir a minúsculas
text = text.replace(" ", "").lower()

Esto eliminará cualquier espacio en el texto de entrada y convertirá todos los caracteres a minúsculas.

Manejar entradas vacías o nulas

En este paso, aprenderás cómo manejar el caso en el que el texto de entrada es vacío o None.

  1. Agrega el siguiente código al principio de la función polybius_encryption():
if text is None:
    return None

if text == "":
    return None

Esto asegurará que la función devuelva None si el texto de entrada es None o una cadena vacía.

  1. Después de completar este paso, el código se muestra a continuación:
def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## Eliminar espacios y convertir a minúsculas
    text = text.replace(" ", "").lower()

    if text == "":
        return None

Configurar el cuadrado de Polibio

En este paso, aprenderás cómo definir el cuadrado de Polibio, que es una cuadrícula de 5x5 que contiene las 26 letras del alfabeto inglés.

  1. Después de los pasos anteriores, defina el cuadrado de Polibio como una lista de listas, donde cada lista interna representa una fila del cuadrado:
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 cuadrado de Polibio se utilizará para asignar las letras del texto de entrada a sus correspondientes coordenadas.

Cifrar el texto

En este paso, aprenderás cómo cifrar el texto de entrada utilizando el cuadrado de Polibio.

  1. Después de los pasos anteriores, agregue el siguiente código a la función 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 carácter en el texto de entrada. Si el carácter es una letra, encuentra las coordenadas correspondientes en el cuadrado de Polibio y las agrega a la cadena encrypted_text. Si el carácter no es una letra, se agrega tal cual a la cadena encrypted_text.

Devolver el texto cifrado

En este último paso, aprenderás cómo devolver el texto cifrado desde la función polybius_encryption().

  1. Agrega la siguiente línea al final de la función polybius_encryption():
return encrypted_text

Esto devolverá el texto cifrado como salida de la función.

Ahora, la función polybius_encryption() completa debería verse así:

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

    ## Eliminar espacios y convertir a minúsculas
    text = text.replace(" ", "").lower()

    if text == "":
        return None

    ## Definir el cuadrado de Polibio
    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))

Ya has completado la implementación del algoritmo de cifrado de Polibio. Puedes probar tu código ejecutando el archivo polybius.py y proporcionando el texto de entrada para ser cifrado.

  1. Ejecuta el archivo polybius.py y proporciona el texto de entrada para ser cifrado.
python3 polybius.py
  1. Observa la salida del texto cifrado.
## Ejemplo 1
text = "tynam"; encryption_text = "4454331132"
## Ejemplo 2
text = "tynam123"; encryption_text = "4454331132123"
## Ejemplo 3
text = "TYnam"; encryption_text = "4454331132"
## Ejemplo 4
text = None; encryption_text = None

¡Felicitaciones! Has implementado con éxito el algoritmo de cifrado de Polibio en Python.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.