Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Descifrado por Permutación de Grupos

Descripción

Esta herramienta implementa un sistema de descifrado basado en permutación de grupos.
El texto cifrado se divide en bloques de tamaño fijo y las posiciones de los caracteres dentro de cada bloque se reorganizan de acuerdo a la permutación inversa.

Además, si el usuario no proporciona el tamaño de grupo o la permutación, el programa puede realizar una búsqueda exhaustiva probando múltiples combinaciones y mostrando los posibles resultados.

Características

  • Interfaz gráfica desarrollada en Tkinter
  • Entrada de texto manual o mediante carga de archivo .txt
  • Normalización automática del texto (se eliminan caracteres no alfabéticos y se convierte a mayúsculas)
  • Modo manual: descifrado con el grupo y la permutación indicados
  • Modo búsqueda exhaustiva: prueba todas las combinaciones de grupos y permutaciones posibles (hasta tamaño 8 por defecto)
  • Guardado del resultado en descifrado.txt
  • Scrollbar integrado en la zona de salida para facilitar la navegación en resultados extensos

Requisitos del Sistema

  • Python 3.x
  • Tkinter (incluido en la mayoría de instalaciones de Python)

Instalación y Ejecución

  1. Asegúrate de tener Python instalado en tu sistema.
  2. Descarga el archivo descifrar.py.
  3. Ejecuta el programa:
python descifrar.py

Uso de la Interfaz

1. Entrada de Texto

  • Escribe o pega el texto cifrado en el área de texto superior, o bien usa "Cargar archivo .txt" para abrir un archivo desde tu sistema.

2. Configuración del Descifrado

  • Modo manual:

    • Introduce un número entero en Tamaño del grupo.
    • Introduce la permutación como lista de números separados por espacios (ejemplo: 3 1 4 2).
    • Haz clic en "Descifrar" → se mostrará el resultado único.
  • Modo búsqueda exhaustiva:

    • Deja vacío el campo de grupo o de permutación.
    • Haz clic en "Descifrar" → se probarán automáticamente múltiples combinaciones (grupos 2 a 8) y se mostrarán todos los resultados candidatos.

3. Guardado del Resultado

  • Haz clic en "Guardar en archivo .txt".
  • El resultado se guardará en descifrado.txt en la misma carpeta del programa.

Ejemplo de Uso

Entrada:

  • Texto cifrado: LHAONMOIRMEBREUSESLHXLXX
  • Tamaño del grupo: 4
  • Permutación: 3 1 2 4

Proceso:

  1. Normalización: LHAONMOIRMEBREUSESLHXLXX

  2. División en bloques de 4: ["LHAO", "NMOI", "RMEB", "REUS", "ESLH", "XLXX"]

  3. Aplicación de permutación inversa (4 3 1 2):

    • "LHAO""HOLA"
    • "NMOI""MINO"
    • "RMEB""MBRE"
    • etc.

Resultado esperado:

HOLAMINOMBRE ...

Algoritmo de Descifrado

Descifrado por Permutación

def descifrar(texto, grupo, perm):
    # Crear la permutación inversa
    inv_permutacion = [0] * grupo
    for i, p in enumerate(perm):
        inv_permutacion[p - 1] = i + 1

    resultado = []
    for i in range(0, len(texto), grupo):
        bloque = texto[i:i+grupo]

        # Si el bloque es más pequeño que el grupo, rellenar con X
        if len(bloque) < grupo:
            return None

        nuevo = "".join(bloque[inv_permutacion[j]-1] for j in range(grupo))
        resultado.append(nuevo)
    
    ## quitar las X añadidas al final
    while resultado and resultado[-1].endswith('X'):
        resultado[-1] = resultado[-1].rstrip('X')
        if not resultado[-1]:
            resultado.pop()

    return "".join(resultado)

Validaciones del Sistema

  1. Grupo válido: Debe ser un número entero positivo.
  2. Permutación válida: Solo números enteros separados por espacios.
  3. Reordenación completa: La permutación debe contener exactamente los números del 1 al tamaño del grupo.
  4. Texto obligatorio: No se puede descifrar si no hay texto de entrada.

Archivos Generados

  • descifrado.txt → contiene el resultado del último descifrado o búsqueda exhaustiva.
  • El archivo se sobrescribe en cada operación de guardado.

Limitaciones

  • Solo procesa caracteres alfabéticos (A-Z).
  • Los bloques incompletos se ignoran en el proceso de descifrado.
  • La búsqueda exhaustiva puede generar una gran cantidad de resultados si el texto es largo.

Seguridad

Este programa es educativo, no un método criptográfico seguro. Para aplicaciones reales se recomienda utilizar algoritmos modernos como AES o RSA.

Solución de Problemas

Error: "El tamaño de grupo debe ser un número entero"

  • Ingresa solo números enteros en el campo de grupo.

Error: "La permutación debe ser una reordenación de 1 a N"

  • Ejemplo válido para grupo 4: 3 1 4 2.

Error: "No hay texto descifrado para guardar"

  • Ejecuta primero el descifrado antes de intentar guardar.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages