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
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: ,
- La longitud de la clave
qiaoes 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 aqiaoson 4-2-1-3. - 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 | , |
- Dado que la última línea falta una letra, se utiliza el carácter de relleno para llenarla.
- 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 |
- 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:
- Primero, comprobamos si la entrada
textestá vacía. Si lo está, devolvemosNone. - Definimos la
clavecomo"qiao"y elpadding_charcomo",". - Creamos una lista
key_orderpara 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. - Rellenamos la entrada
textcon elpadding_charpara asegurarnos de que la longitud del texto es un múltiplo de la longitud de la clave. - 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.
- Reorganizamos las columnas de la matriz de acuerdo con el
key_orderque calculamos anteriormente. - 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.
Resumen
¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



