.
Solución al Ejercicio: Cifrado transposición columnar
📋 Copiar código
import math
def cifrado_transposicion_columnar(texto, num_columnas):
"""
Realiza un cifrado por transposición columnar en un texto.
Args:
texto: La cadena de texto a cifrar.
num_columnas: El número de columnas a utilizar en la transposición.
Returns:
La cadena de texto cifrada.
"""
num_filas = math.ceil(len(texto) / num_columnas)
matriz = [['' for _ in range(num_columnas)] for _ in range(num_filas)]
indice = 0
for fila in range(num_filas):
for columna in range(num_columnas):
if indice < len(texto):
matriz[fila][columna] = texto[indice]
indice += 1
texto_cifrado = ""
for columna in range(num_columnas):
for fila in range(num_filas):
texto_cifrado += matriz[fila][columna]
return texto_cifrado
# Ejemplos de uso
texto1 = "HOLA MUNDO"
columnas1 = 3
resultado1 = cifrado_transposicion_columnar(texto1, columnas1)
print(f"'{texto1}' cifrado con {columnas1} columnas: '{resultado1}'")
texto2 = "ESTE ES UN MENSAJE SECRETO"
columnas2 = 4
resultado2 = cifrado_transposicion_columnar(texto2, columnas2)
print(f"'{texto2}' cifrado con {columnas2} columnas: '{resultado2}'")
texto3 = "PYTHON"
columnas3 = 2
resultado3 = cifrado_transposicion_columnar(texto3, columnas3)
print(f"'{texto3}' cifrado con {columnas3} columnas: '{resultado3}'")
texto4 = ""
columnas4 = 5
resultado4 = cifrado_transposicion_columnar(texto4, columnas4)
print(f"'' cifrado con {columnas4} columnas: '{resultado4}'")
texto5 = "ABCDEFGHIJKLMN"
columnas5 = 5
resultado5 = cifrado_transposicion_columnar(texto5, columnas5)
print(f"'{texto5}' cifrado con {columnas5} columnas: '{resultado5}'")
Explicación del Código:
-
import math
:
- Importa el módulo
math
para
usar la función ceil
(redondear hacia arriba).
-
def
cifrado_transposicion_columnar(texto, num_columnas):
:
- Define una función llamada
cifrado_transposicion_columnar
que toma el texto a cifrar y el
número de columnas como entrada.
-
num_filas = math.ceil(len(texto)
/ num_columnas)
:
- Calcula el número de filas necesarias
para acomodar todo el texto en la matriz.
-
matriz = [['' for _ in
range(num_columnas)] for _ in range(num_filas)]
:
- Crea una matriz (lista de listas) vacía
con el número calculado de filas y el número especificado de columnas.
-
indice = 0
:
- Inicializa un índice para recorrer el
texto de entrada.
-
for fila in range(num_filas):
y for columna in range(num_columnas):
:
- Itera a través de las filas y columnas
de la matriz.
if indice < len(texto):
:
- Si todavía hay caracteres en el
texto de entrada, se colocan en la celda actual de la matriz.
- Se incrementa el
indice
.
-
texto_cifrado = ""
:
- Inicializa una cadena vacía para
almacenar el texto cifrado.
-
for columna in
range(num_columnas):
y for fila in
range(num_filas):
:
- Itera a través de las columnas primero y
luego las filas.
texto_cifrado +=
matriz[fila][columna]
:
- Agrega el carácter de la celda
actual (leyendo por columnas) al
texto_cifrado
.
-
return texto_cifrado
:
- Devuelve la cadena de texto cifrada.
Ejemplos de Uso:
Los ejemplos muestran cómo la función cifra
diferentes textos utilizando un número específico de columnas. El texto se
escribe en la matriz por filas y se lee por columnas para producir el resultado
cifrado.