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.
- 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
- Python 3.x
- Tkinter (incluido en la mayoría de instalaciones de Python)
- Asegúrate de tener Python instalado en tu sistema.
- Descarga el archivo
descifrar.py. - Ejecuta el programa:
python descifrar.py- 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.
-
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.
- Haz clic en "Guardar en archivo .txt".
- El resultado se guardará en
descifrado.txten la misma carpeta del programa.
- Texto cifrado:
LHAONMOIRMEBREUSESLHXLXX - Tamaño del grupo:
4 - Permutación:
3 1 2 4
-
Normalización:
LHAONMOIRMEBREUSESLHXLXX -
División en bloques de 4:
["LHAO", "NMOI", "RMEB", "REUS", "ESLH", "XLXX"] -
Aplicación de permutación inversa (4 3 1 2):
"LHAO"→"HOLA""NMOI"→"MINO""RMEB"→"MBRE"- etc.
HOLAMINOMBRE ...
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)- Grupo válido: Debe ser un número entero positivo.
- Permutación válida: Solo números enteros separados por espacios.
- Reordenación completa: La permutación debe contener exactamente los números del 1 al tamaño del grupo.
- Texto obligatorio: No se puede descifrar si no hay texto de entrada.
descifrado.txt→ contiene el resultado del último descifrado o búsqueda exhaustiva.- El archivo se sobrescribe en cada operación de guardado.
- 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.
Este programa es educativo, no un método criptográfico seguro. Para aplicaciones reales se recomienda utilizar algoritmos modernos como AES o RSA.
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.