Implementar el cifrado de permutación de columnas 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 a implementar el algoritmo de cifrado de permutación de columnas en Python. El cifrado de permutación de columnas es un método de cifrado de texto plano mediante la reorganización de las columnas de una matriz formada a partir del texto de entrada, basado en una palabra clave.

👀 Vista previa

## Muestra 1
text = "welcometolq"; encryption_text = "ct,emlwooleq"
## Muestra 2
text = "welcometolq "; encryption_text = "ct emlwooleq"
## Muestra 3
text = "w"; encryption_text = ",,w,"
## Muestra 4
text = None; encryption_text = None

🎯 Tareas

En este proyecto, aprenderás:

  • El concepto básico del cifrado de permutación de columnas
  • Cómo implementar el algoritmo de cifrado de permutación de columnas en Python
  • Cómo probar el algoritmo de cifrado con entradas de muestra

🏆 Logros

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

  • Comprender los principios del cifrado de permutación de columnas
  • Implementar el algoritmo de cifrado de permutación de columnas en Python
  • Cifrar y descifrar texto utilizando el método de cifrado de permutación de columnas

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/strings -.-> lab-302705{{"Implementar el cifrado de permutación de columnas en Python"}} python/conditional_statements -.-> lab-302705{{"Implementar el cifrado de permutación de columnas en Python"}} python/lists -.-> lab-302705{{"Implementar el cifrado de permutación de columnas en Python"}} python/function_definition -.-> lab-302705{{"Implementar el cifrado de permutación de columnas en Python"}} python/standard_libraries -.-> lab-302705{{"Implementar el cifrado de permutación de columnas en Python"}} python/file_operations -.-> lab-302705{{"Implementar el cifrado de permutación de columnas en Python"}} end

Comprender el cifrado de permutación de columnas

En este paso, aprenderás el concepto básico del cifrado de permutación de columnas y cómo funciona.

El cifrado de permutación de columnas es un método de cifrado de texto plano escribiéndolo línea por línea con un número fijo de caracteres por línea (el número de letras únicas en la clave, que por lo general es una palabra sin letras repetidas). Si el número de caracteres en la última línea es menor que el número fijo de caracteres por línea, se utilizan símbolos especiales para rellenar la línea, formando una matriz. Luego, las columnas de la matriz se reorganizan de acuerdo con el orden alfabético de las letras en la clave. Finalmente, las columnas reorganizadas se leen una por una, resultando en el texto cifrado.

Por ejemplo, consideremos el siguiente texto plano, clave y carácter de relleno:

Texto plano: welcometolq

Clave: qiao

Carácter de relleno: ,

  1. La longitud de la clave qiao es 4. Luego, se le asignan números a la clave en el orden alfabético de las 26 letras inglesas, con números más bajos asignados a las letras que aparecen antes en el orden. Los números asignados a qiao son 4-2-1-3.
  2. El texto plano se divide en líneas, cada una formada por 4 (la longitud de la clave) letras, resultando en 4 columnas:
1 2 3 4
w e l c
o m e t
o l q ,
  1. Dado que la última línea falta una letra, se utiliza el carácter de relleno para llenarla.
  2. El orden de las columnas en la matriz se reordena de acuerdo con el orden alfabético de la clave:
4 2 1 3
c e w l
t m o e
, l o q
  1. Luego, el contenido se lee una columna a la vez, resultando en el texto cifrado: ct,emlwooleq.

Implementar el cifrado de permutación de columnas

En este paso, implementarás el algoritmo de cifrado de permutación de columnas en Python.

Abre el archivo column_permutation.py y localiza la función column_permutation_encryption(text). Esta función toma un fragmento de texto como entrada, utiliza la clave qiao y el carácter de relleno , (coma) para realizar el cifrado de permutación de columnas en el contenido y devuelve el texto cifrado.

Aquí está el código que debes implementar:

def column_permutation_encryption(text: str) -> str:
    if not text:
        return None

    key = "qiao"
    padding_char = ","
    key_order = []
    sorted_key = sorted(key)
    for i in range(0, len(key)):
        key_order.append(sorted_key.index(key[i]))
    padded_text = text.ljust(len(key) * ((len(text) - 1) // len(key) + 1), padding_char)
    matrix = [
        padded_text[i : i + len(key)] for i in range(0, len(padded_text), len(key))
    ]
    encrypted_matrix = [[row[i] for i in key_order] for row in matrix]

    encryption_text: str = "".join(
        ["".join(column) for column in zip(*encrypted_matrix)]
    )
    return encryption_text

Veamos el código paso a paso:

  1. Primero, comprobamos si la entrada text está vacía. Si lo está, devolvemos None.
  2. Definimos la clave como "qiao" y el padding_char como ",".
  3. Creamos una lista key_order para almacenar el orden alfabético de las letras en la clave. Hacemos esto ordenando primero la clave y luego encontrando el índice de cada letra en la clave ordenada.
  4. Rellenamos la entrada text con el padding_char para asegurarnos de que la longitud del texto es un múltiplo de la longitud de la clave.
  5. Creamos una matriz a partir del texto rellenado, donde cada fila representa una línea del texto y cada columna representa un carácter en la línea.
  6. Reorganizamos las columnas de la matriz de acuerdo con el key_order que calculamos anteriormente.
  7. Finalmente, leemos las columnas reorganizadas una por una y las concatenamos para formar el texto cifrado.

Probar el cifrado de permutación de columnas

Ahora que has implementado el algoritmo de cifrado de permutación de columnas, probémoslo con algunas entradas de muestra.

Agrega el siguiente código al final del archivo column_permutation.py:

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

Este código pedirá al usuario que ingrese un fragmento de texto, luego llamará a la función column_permutation_encryption() con el texto de entrada y mostrará el texto cifrado resultante.

Guarda el archivo y ejecuta el siguiente comando en la terminal:

python3 column_permutation.py

Ingresa algunos textos de muestra y observa los textos cifrados resultantes. Puedes usar los ejemplos proporcionados en el desafío original como referencia:

## Muestra 1
text = "welcometolq"
encryption_text = "ct,emlwooleq"
## Muestra 2
text = "welcometolq "
encryption_text = "ct emlwooleq"
## Muestra 3
text = "w"
encryption_text = ",,w,"
## Muestra 4
text = None
encryption_text = None

¡Felicitaciones! Has implementado con éxito el algoritmo de cifrado de permutación de columnas en Python.

✨ Revisar Solución y Practicar

Resumen

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