1 usuario conectado

Cifrado transposición columnar. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada cifrado_transposicion_columnar que tome una cadena de texto y un número de columnas como entrada, y devuelva el texto cifrado. En este tipo de cifrado, el texto se escribe en columnas de un ancho fijo y luego se lee fila por fila, produciendo el texto cifrado.

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. import math:

    • Importa el módulo math para usar la función ceil (redondear hacia arriba).
  2. 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.
  3. num_filas = math.ceil(len(texto) / num_columnas):

    • Calcula el número de filas necesarias para acomodar todo el texto en la matriz.
  4. 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.
  5. indice = 0:

    • Inicializa un índice para recorrer el texto de entrada.
  6. 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.
  7. texto_cifrado = "":

    • Inicializa una cadena vacía para almacenar el texto cifrado.
  8. 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.
  9. 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.