Cifra reja giratoria
ATTACKATDAWN en una reja de 4 por 4 se convierte en ATTCXAKAXXDTXAWN: las letras entran por los huecos de la máscara, que gira un cuarto de vuelta cuatro veces, y el cuadrado se lee fila a fila. Solo cambia el orden. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- ATTACKATDAWN
- Tamaño
- 4
- Modo de cálculo
- Encrypt
- Texto
- ATTCXAKAXXDTXAWN
- Cantidad de orificios
- 4
- Longitud
- 16
- Cantidad de relleno
- 4
La cifra de reja giratoria, también llamada reja de Fleissner, es un sistema clásico de transposición que oculta el orden y no el valor de las letras. Usted coloca una máscara cuadrada de cartón con agujeros recortados sobre una cuadrícula en blanco, escribe las siguientes letras del texto en claro a través de las aberturas, gira la máscara noventa grados y repite hasta llenar la cuadrícula; al leer el cuadrado lleno fila a fila obtiene el texto cifrado. Esta capacidad implementa ese proceso de forma determinista: aporte el texto, un tamaño de cuadrícula par, el patrón base de agujeros y el modo cifrar o descifrar. El motor comprueba que cuatro giros en el sentido de las agujas del reloj cubran cada celda exactamente una vez e informa de una reja inválida cuando los agujeros se solapan, dejan huecos, quedan fuera del tablero o tienen un recuento incorrecto. Los espacios y la puntuación viajan con las letras; el texto en claro corto se rellena con un solo carácter de relleno para que el mensaje complete cuadrados enteros.
Cómo funciona la reja giratoria
Una reja giratoria no es una cifra de sustitución: cada carácter conserva su identidad y solo cambia de posición. Fije una longitud de lado n par de modo que el tablero tenga n al cuadrado celdas. Una máscara válida para cuatro cuartos de vuelta tiene exactamente un cuarto de esas celdas abiertas —n al cuadrado entre cuatro agujeros— elegidas de forma que al rotar las aberturas noventa grados en el sentido de las agujas del reloj cuatro veces se visite cada celda una sola vez y nunca dos.
Esa condición combinatoria es el corazón del sistema: cada órbita de rotación bajo el grupo cíclico del cuadrado aporta exactamente un agujero en la máscara base. El cifrado recorre las cuatro orientaciones en orden. En cada orientación los agujeros visibles se ordenan por filas, se escriben a través de ellos los siguientes caracteres del texto en claro y la máscara gira.
Cuando terminan los cuatro giros, la cuadrícula está completa y el texto cifrado es la concatenación de las filas de arriba abajo y de izquierda a derecha. El descifrado rellena esa misma cuadrícula a partir del texto cifrado en orden por filas y luego lee las letras de vuelta a través de la misma secuencia de agujeros rotados, restaurando el orden original incluido el relleno que se añadió para completar el último bloque.
Como el mapa es una permutación pura de índices para un tamaño y un conjunto de agujeros fijos, la rutina es determinista entre entornos de ejecución, sin aleatoriedad, sin relojes ni consultas de red, y segura para pruebas de referencia. Un lado impar deja una celda central fija bajo la rotación y se rechaza como reja inválida en este modelo de cuatro giros.
Las órbitas superpuestas, los agujeros base duplicados, las coordenadas fuera de rango o el recuento incorrecto de agujeros también fallan la validación antes de mover ningún carácter, de modo que quien llama siempre sabe si la máscara es una clave legal.
Uso en clase, en CTF, en producto y coste
Los cursos de historia y criptografía usan la reja giratoria para introducir claves geométricas y argumentos de órbitas antes de las cifras modernas: el alumnado diseña un patrón legal de cuatro agujeros en un tablero de cuatro por cuatro, cifra un eslogan corto, entrega el texto cifrado y la descripción de la máscara a un compañero y solo recupera el eslogan cuando ambas partes comparten las mismas aberturas.
Quienes crean retos de captura la bandera esconden banderas bajo una reja publicada o parcial y verifican los envíos de quienes resuelven contra esta misma rutina determinista. Quienes redactan documentación insertan pares de cifrar y descifrar en tutoriales sin mantener a mano tablas de permutación para cada rotación. Esa paridad mantiene alineadas las soluciones de los deberes, los valores de referencia de integración continua y las demostraciones de producción.
No trate la reja giratoria como confidencialidad para secretos reales —es una herramienta didáctica y de juego—, pero sí trate el patrón de agujeros y el tamaño como los parámetros secretos del sistema de juguete.
Qué puede hacer con ella
Autoría de CTF y de acertijos
Esconda cadenas cortas de reto bajo una reja giratoria publicada o parcial y verifique los envíos de quienes las resuelven contra el mismo par cifrar/descifrar determinista.
Documentación y zonas de juego clásicas
Genere ejemplos estables de texto cifrado para tutoriales de Fleissner y reja giratoria sin mantener a mano tablas de rotación para cada tamaño de tablero.
Preguntas frecuentes
¿Qué es una cifra de reja giratoria?
Una cifra clásica de transposición que escribe letras a través de agujeros en una máscara cuadrada, gira la máscara 90° tres veces más para llenar la cuadrícula y luego lee el cuadrado fila a fila. Los valores de las letras no cambian; solo el orden.
¿Por qué size debe ser par?
Esta implementación usa cuatro giros de 90° sin celda central fija.
¿Qué hace inválida a una reja?
Un recuento de agujeros incorrecto (no size²/4), aberturas duplicadas o fuera de rango, o cualquier celda cubierta más de una vez o dejada sin cubrir tras cuatro rotaciones. El mensaje de error incluye la frase invalid grille.
¿Cuánto cuesta?
La página interactiva se ejecuta gratis en su navegador.
¿Por qué aparecen letras X en el texto cifrado?
Son el relleno. Si el mensaje no alcanza para llenar el cuadrado completo, se completa con un carácter de relleno, la X mayúscula por defecto. Al cifrar ATTACKATDAWN en una reja de 4 por 4 se añaden cuatro X.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/enc/grille-cipher \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"ATTACKATDAWN","size":4,"holes":[{"row":0,"col":0},{"row":0,"col":1},{"row":0,"col":2},{"row":1,"col":1}],"mode":"encrypt"}'const res = await fetch("https://api.kit.forhosting.com/enc/grille-cipher", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "ATTACKATDAWN",
"size": 4,
"holes": [
{
"row": 0,
"col": 0
},
{
"row": 0,
"col": 1
},
{
"row": 0,
"col": 2
},
{
"row": 1,
"col": 1
}
],
"mode": "encrypt"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/grille-cipher",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "ATTACKATDAWN",
"size": 4,
"holes": [
{
"row": 0,
"col": 0
},
{
"row": 0,
"col": 1
},
{
"row": 0,
"col": 2
},
{
"row": 1,
"col": 1
}
],
"mode": "encrypt"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/grille-cipher", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"ATTACKATDAWN","size":4,"holes":[{"row":0,"col":0},{"row":0,"col":1},{"row":0,"col":2},{"row":1,"col":1}],"mode":"encrypt"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"ATTACKATDAWN","size":4,"holes":[{"row":0,"col":0},{"row":0,"col":1},{"row":0,"col":2},{"row":1,"col":1}],"mode":"encrypt"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/grille-cipher", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "ATTACKATDAWN",
"size": 4,
"holes": [
{
"row": 0,
"col": 0
},
{
"row": 0,
"col": 1
},
{
"row": 0,
"col": 2
},
{
"row": 1,
"col": 1
}
],
"mode": "encrypt"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.grille_cipher",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Use la herramienta gratis en esta página, o invoque el mismo algoritmo puro por API a $0.002 por solicitud para demostraciones en clase, ayudantes de CTF y ejemplos de documentación reproducibles.
Llamar a la API y leer el resultado
Text es la cadena en claro o cifrada; no se recorta ni se unifica la capitalización, de modo que mayúsculas y minúsculas mezcladas, espacios y puntuación participan en la transposición como cualquier otro carácter. Size es un entero par de dos a dieciséis inclusive —el lado del cuadrado—. Holes es un arreglo de objetos con índices enteros row y col que empiezan en cero; la longitud de ese arreglo debe ser igual a size al cuadrado dividido entre cuatro. Haga el viaje de ida y vuelta cifrando con un size y un patrón de agujeros dados y descifrando con el mismo par; una máscara distinta produce una permutación distinta y no restaurará el original. El texto vacío se rechaza. Envíe text, size, holes y mode. Mode es encrypt o decrypt; el manejador acepta alias cortos como enc y dec. El pad_char opcional es un solo carácter usado solo al cifrar cuando la longitud del mensaje no es múltiplo de size al cuadrado; el valor por defecto es la X mayúscula. Los campos obligatorios ausentes, un text que no sea cadena, un size no par, agujeros fuera de rango, una máscara solapada o incompleta, un modo desconocido, o una longitud de descifrado que no sea múltiplo del número de celdas fallan todos con invalid_input y un mensaje que nombra el problema —la redacción invalid grille aparece cuando la falta es de la máscara misma—. Si tiene éxito, el JSON incluye text (la cadena transformada), mode (encrypt o decrypt canónico), size, holes (normalizados y ordenados), holes_count, length del resultado, pad_count (cuántos caracteres de relleno se añadieron al cifrar, cero al descifrar) y blocks (cuántos cuadrados completos se procesaron). Prefiera este endpoint cuando la intención de búsqueda sea específicamente reja giratoria, reja de Fleissner o cifra de máscara de cartón rotatoria, y no una transposición columnar o de rail-fence.
Uso en clase, en CTF, en producto y coste
Los equipos de producto que publican zonas de juego de cifras clásicas pueden llamar a la API para comprobaciones del lado del servidor mientras las visitas experimentan gratis en el navegador. Como el trabajo es puro indexado en tiempo de análisis sin servicio externo, la latencia se mantiene baja y el modelo de coste es sencillo: pruebe conversiones ilimitadas gratis en esta página y luego automatice entradas idénticas a $0.002 por elemento correcto con saldo prepago del KIT cuando integre desde guiones o servicios de backend. Asigne los controles de la interfaz a size, un editor de filas para holes y cifrar frente a descifrar; valide en el cliente el size par y el recuento de agujeros cuando pueda, y muestre los mensajes de invalid_input junto al editor de la reja cuando el usuario envíe aberturas solapadas o un lado impar.
Casos de integración
Prácticas de criptografía en clase
El alumnado diseña una máscara de agujeros válida en una cuadrícula par, cifra una frase con cuatro giros y luego la recupera con el mismo size y los mismos holes, mostrando que la geometría es la clave.
Preguntas técnicas
¿El descifrado necesita los mismos holes y size?
Sí. Cifrar y descifrar usan el mismo size par y el mismo patrón base de agujeros. Una máscara distinta aplica otra permutación y no restaurará el texto original.