Decodificador de cadenas de codificación

El texto que ha pasado por más de un codificador es el caso normal, no el exótico: un cuerpo JSON dentro de un token Base64, una URL dentro de una línea de registro, un valor de formulario que se escapó en porcentaje y después se codificó en Base64 para viajar en una cabecera. Esta página deshace esas capas una a una, nombra la técnica que usó en cada paso, indica su confianza y el porqué, y enumera las técnicas que rechazó en ese paso para que pueda discrepar. Se detiene cuando el texto deja de parecer codificado, cuando alcanza el límite de pasos, o cuando el siguiente paso devolvería un texto que ya ha visto. Nada se adivina en silencio: una técnica cuyo alfabeto se solapa con palabras corrientes nunca se aplica por sí sola, solo se ofrece.
Todo el procesamiento se realiza localmente en su navegador: sus datos nunca se suben a ningún servidor.

¿Es nuevo en esto? Las cadenas de codificación explicadas en lenguaje sencillo — qué es una capa, por qué la codificación no es cifrado y por qué importa el orden de los pasos.
Aplicar una capa por sí sola solo cuando la confianza sea al menos de:
Detener después de
Ejecuta de una vez el límite de capas indicado arriba. La misma tabla se construye de cualquier modo, así que puede cambiar a avanzar paso a paso en cualquier momento.
O elija una técnica a mano:
Esta lista es lo que la página puede ver ahora mismo en el texto. Los cifrados por rotación siempre aparecen, porque no pueden detectarse; también aparece cualquier cosa que solo sea reconocible una vez que se quita el espacio en blanco de un texto partido, que se marca como tal y nunca se aplica por sí sola.
Esta entrada es más larga de lo que a esta página le gusta ejecutar sin preguntar, y la estimación de arriba indica que puede tardar . Haga clic en Deshacer toda la cadena de nuevo para continuar de todos modos, o acorte antes el texto.
(escriba o pegue algo primero)
(la cadena aparecerá aquí)
¿Qué es una cadena de codificación y por qué necesita su propio decodificador?

Una capa es un codificador aplicado a un texto. Una cadena son dos o más de ellos aplicados uno tras otro. Casi todos los ejemplos cotidianos son así: alguien necesita meter un trozo de binario — una imagen, un token firmado — en un sitio que solo transporta texto, así que lo pasa a Base64. Ese resultado en Base64 debe viajar en una URL, así que se escapa en porcentaje. Esa URL completa acaba en una línea de registro o en un archivo de configuración, así que también se escapan las barras invertidas o las comillas. Lo que ve cuando aparece el problema es la capa más externa, y es ilegible por la razón sencilla de que las capas internas siguen puestas.

Los decodificadores de un solo propósito no ayudan en eso. Un decodificador de Base64 al que se le pasa JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC producirá una respuesta perfectamente correcta que sigue siendo ilegible, porque los escapes de porcentaje y las referencias de caracteres siguen por encima del texto que quería. Lo que realmente necesita es algo que decida, en cada paso, qué codificador quitar; y esta página es esa decisión hecha visible.

La codificación no es cifrado, y esta página no rompe nada. Cada técnica de esta página es una forma pública y reversible de escribir la misma información. Base64 no tiene clave. El escape porcentual no tiene clave. Si la capa más interna está cifrada, esta página decodificará las capas externas y le entregará texto cifrado, lo cual dirá claramente en lugar de fingir que es un resultado. No hay nada que ejecutar ni nada que ocultar.
Los ejemplos resueltos de esta página

Cada fila de abajo es una entrada real del archivo de datos de esta página, y la columna central es lo que encuentra el propio deshacedor de la página. La última columna es el texto que queda cuando se detiene.

Qué es la entrada Capas encontradas Entrada, entrecomillada tal como llega Lo que queda al detenerse

Estas filas las renderiza la página a partir de su propia lista de casos y se vuelven a ejecutar en cada visita, así que no pueden desviarse de lo que hace el código. La autocomprobación de abajo verifica cada una.

Cómo decide la página qué capa quitar
  1. Mire la forma, no el significado. Cada técnica tiene una firma: un escape de porcentaje, un número par de dígitos hexadecimales, un alfabeto y una longitud que encajan con Base64. La página enumera cada técnica cuya firma coincide con el texto, con una confianza entre 0 y 1.
  2. Decodifique y compruebe si el resultado es texto. Una técnica solo merece aplicarse si produce algo legible. Cada candidato se ejecuta realmente, y su salida se puntúa según cuántos caracteres imprimibles contiene.
  3. Aplique solo lo que supere el umbral, por orden de confianza. Se aplica el candidato de mayor confianza por encima de su umbral y el proceso se repite sobre el resultado. Por debajo del umbral, las técnicas se listan pero no se aplican.
  4. Una regla que esta página añade encima. Aunque una técnica supere el umbral, esta página no la aplicará por sí sola a menos que el resultado sea realmente texto legible: los caracteres de sustitución y de control cuentan en su contra. Sin esa regla, la palabra corriente cafe se decodificaría con validez como tres bytes que solo son imprimibles en Latin-1, y getUserName se decodificaría con validez como ocho bytes de ruido. El detector tiene razón al decir que esas cadenas encajan en el alfabeto; esta página decide que encajar en el alfabeto no basta. Aun así puede aplicarlas a mano, y la lista de candidatos le indica que las rechazó y por qué.
  5. Detenerse, deliberadamente. Cuando ninguna técnica supera el umbral, cuando el texto deja de cambiar, cuando se alcanza el límite de pasos, o cuando el siguiente paso devolvería un texto que ya apareció en esta cadena. Este último punto importa: ROT13 es su propia inversa, así que una cadena que pudiera dar ese paso dos veces nunca terminaría.
  6. Un texto partido se ofrece, nunca se aplica. Si el texto está cortado en varias líneas, el detector ve espacios en blanco, lee prosa corriente y no encuentra nada. Así que la página quita los espacios en blanco de una copia del texto, vuelve a preguntar al detector y ofrece lo que encuentre como un paso que debe elegirse a mano. Quitar espacios en blanco de su texto es reescribir su texto, y esta página no reescribe nada que usted no le haya pedido reescribir.
Lo que esta página no hará
Decodifica, y nada más. El texto que pega nunca se ejecuta: ni eval, ni new Function, ni inyección de scripts, ni apertura de documentos. Nunca se envía a ningún sitio: ni subidas, ni peticiones, ni analítica. Aparte del espacio de anuncio al pie de página y de la fila de botones para compartir (que son los únicos dos widgets de terceros que carga esta página), no se descarga ninguna fuente ni script de otro host. La salida decodificada se escribe en la página como texto, así que una etiqueta HTML que sale de una capa se muestra como etiqueta y no se convierte en una. Puede comprobar todo eso: pulse Autocomprobación y verifica el código fuente de esta página buscando cualquiera de esas construcciones, y falla si encuentra alguna.
Lo que puede reconocer y lo que no
Técnica Qué seguro, por sí sola La trampa

El texto citado en esta página está escrito para este sitio. Los alfabetos de Base64, Base32, Base58, Base91 y quoted-printable y el formato de bloque uuencode son los publicados; la decodificación sigue esas definiciones y no las peculiaridades de ninguna herramienta concreta. Los vectores de referencia de los alfabetos viven en las páginas hermanas, que incluyen los vectores de prueba de la RFC 4648.

Texto que llega partido en varias líneas

Un bloque que ha pasado por un mensaje de correo, un archivo PEM, un token en una cabecera o un hash pegado desde un terminal suele estar partido: el codificador lo cortó en una columna fija — 76 caracteres es la convención MIME — y puso un salto de línea donde terminó la columna. Esos saltos de línea no forman parte de los datos. Existen para que una línea larga sobreviva al transporte, y se espera que todo decodificador que lee un bloque así los ignore.

Esta página no los ignora por sí sola, y la razón es la regla que usa en todo lo demás. El espacio en blanco es la señal más fuerte de que una cadena es prosa y no datos, y es la prueba que impide que The quick brown fox jumps over the lazy dog. se lea como algo en absoluto. Un bloque partido se parece exactamente a la prosa para esa prueba, así que la página no encuentra nada en él; y entonces hace la mitad honesta del trabajo: calcula lo que encontraría si se quitara el espacio en blanco, lo lista en el selector manual marcado como espacios fuera primero, y se detiene ahí. Se lista en lugar de aplicarse porque quitar espacios en blanco cambia su texto, y esta página solo cambia el texto cuando puede demostrar cuál es el cambio. Aquí sí puede demostrar cuál es el cambio, y aun así se niega a hacerlo por usted, porque un texto con un salto de línea en medio de un valor y un texto con un salto de línea entre dos campos se ven iguales desde dentro.

Los dos pasos cuando la página se detiene en un texto partido. Cambie a Avanzar a mano, pulse Aplicar la siguiente capa una vez (eso es lo que da a la página una cadena a la que añadir, y no cambia nada), y después elija la entrada marcada como espacios fuera primero y pulse Aplicar. La fila que sale indica cuántos caracteres de espacio en blanco se eliminaron, y declara su tamaño de entrada como el texto que pegó, así que la diferencia entre los dos recuentos de esa fila es exactamente el espacio en blanco que salió.

El mismo razonamiento cubre los casos que van en sentido contrario. Un bloque uuencode lleva una línea begin y un carácter de longitud en cada línea, así que es reconocible tal como está y se aplica por sí solo; un cuerpo quoted-printable conserva sus propios saltos de línea blandos y lo decodifica su propio decodificador, que sabe que un único = al final de una línea es una continuación y no un dato. Cuando una prueba de forma no puede distinguir prosa de datos, la página se niega y le muestra la alternativa en lugar de elegir por usted.

Lo que esta página ejecutará y lo que se niega a ejecutar

La tabla de abajo se construye a partir de las mismas constantes que aplica la página, así que una fila y una advertencia de esta página no pueden contradecirse. Las dos cifras que sorprenden a la gente son las filas de Base58 y Base62: esas dos técnicas se convierten mediante una división larga cuyo coste crece con el cuadrado de la longitud, así que esta página solo las ejecuta sobre una cadena corta y lo indica en el paso en lugar de parecer colgada.

Las estimaciones son deliberadamente pesimistas. Proceden de un banco de pruebas de tiempos y no de su equipo, y un navegador de escritorio suele ser varias veces más rápido que la cifra mostrada.