Cómo empaquetar y desempaquetar JavaScript

Empaquetar reescribe el JavaScript dentro del envoltorio eval(function(p,a,c,k,e,d){…}(…)) del clásico empaquetador Base62: cada palabra se convierte en un índice dentro de un diccionario de palabras únicas ordenadas, y la carga conserva el texto original con comillas, barras invertidas y saltos de línea escapados. Desempaquetar evalúa esa carga en esta página y muestra el JavaScript que produce.

Esto es ofuscación, no cifrado, y desempaquetar ejecuta el código que pegas: úsalo solo con scripts de confianza. Los dos botones trabajan únicamente con el texto del cuadro, no se sube nada y la página no envía ninguna petición al empaquetar ni al desempaquetar.

  1. Pega el JavaScript en el cuadro superior, o una carga empaquetada eval(function(p,a,c,k,e,d){…}) si quieres volver a leerla.
  2. Pulsa Empaquetar JavaScript. El cuadro de resultado muestra el envoltorio en una sola línea, con la carga empaquetada y el diccionario de palabras en su lista de argumentos.
  3. Llévate el envoltorio con el botón Copiar, o pulsa Limpiar para vaciar los dos cuadros.
  4. Para el camino inverso, pega una carga empaquetada y pulsa Desempaquetar. La página la evalúa e imprime el código que devuelve.
  5. Si la entrada no contiene eval, no se puede evaluar o no devuelve texto, el cuadro muestra un aviso con el motivo en lugar de un resultado vacío.

Qué hace cada botón

El envoltorio que escribe el empaquetador

Cada palabra (letras, dígitos, guion bajo y $) se sustituye por un índice en base 62 (0-9, luego a-z, luego A-Z) y las palabras únicas se ordenan en el diccionario que viaja con la carga. La carga es una cadena entre comillas simples, así que las comillas, las barras invertidas y los saltos de línea se escapan en lugar de borrarse: un comentario // sigue siendo un comentario y una sentencia sin punto y coma conserva su salto de línea.

El resultado es JavaScript normal: si lo pegas en una página, se ejecuta, y cualquier desempaquetador que evalúe el envoltorio devuelve el código original. En esta versión se comprobó la ida y vuelta byte a byte con comillas escapadas, expresiones regulares con barras invertidas, plantillas de texto, comentarios de bloque, archivos sin punto y coma, texto CJK, identificadores con $, texto JSON y diccionarios de más de 60 palabras.

Volver a leer una carga

Desempaquetar acepta cualquier carga que se evalúe como texto, incluidas las creadas por este mismo envoltorio en otro sitio. El cuadro de resultado es de solo lectura y tiene resaltado de sintaxis, y el botón de copiar copia su texto.

Desempaquetar evalúa la entrada dentro de esta página —es justo lo que hace el envoltorio eval()—, así que desempaqueta solo código de confianza. Si la carga lanza un error o devuelve algo que no es texto JavaScript, verás un aviso en lugar de un cuadro vacío.

Tamaños y tiempos medidos

Empaquetar reduce el código a una sola línea y suele encoger el código repetitivo: 2,7 KB de funciones pasaron a 1,8 KB, 16,7 KB a 11 KB y 85 KB a 55 KB, con un tiempo de empaquetado de 1 a 5 ms y de desempaquetado de 0,3 a 3 ms en Chrome.

Como el envoltorio es reversible por diseño, toma el resultado como ofuscación contra una lectura casual, no como protección de un secreto: cualquiera puede pegarlo aquí o en otro desempaquetador y recuperar el código.

Herramientas recientes: