A ver, vamos a cambiar los nombres a las variables y a las funciones por algo más entendible, y luego cuento lo que hace el código.
El código anterior es equivalente a:
Insertar CODE, HTML o PHP:
function decode(encodedText) {
semilla = "e5al}9mS(?8TpNyq:+icPYhk>V0u6Qs4C-{)%.]OoLM=fKwGDE7bg&!2U<[ZA*Jvr;FHxz/tBj3X%RdI1,n'_ ".split("");
encodedText = atob(encodedText.split("").reverse().join("")).split("-");
resultado = "";
for (var i = 0; i < encodedText.length; i++) {
if(typeof semilla[encodedText[i]] != "undefined") {
resultado = resultado + semilla[encodedText[i]];
}
}
return resultado;
}
w = window;
decodedText = decode("==AMtYTLwQTL0YTLyITLtkTM");
Lo que vemos es que se llama a la función decode con un churro "encriptado", y que esta función lo procesa y lo devuelve desencriptado.
En la variable semilla tenemos una cadena, que al hacer split se convierte a un array de caracteres.
En la línea
Insertar CODE, HTML o PHP:
encodedText = atob(encodedText.split("").reverse().join("")).split("-");
el split hace lo mismo, transforma la cadena encriptada en un array, el reverse, le invierte el orden, y el join lo vuelve a juntar en una cadena. A todo eso, se lo pasa a la función atob que es para hacer el decode de base64, y a la cadena resultante, la parte por los "-" guiones, convirtiendo el encodedText nuevamente en un array. En concreto en este array decodedText = ["19", "", "22", "64", "40", "6", "0"].
Y en cada vuelta del bucle, si semilla[encodedText
] != undefined, pues concatena el carácter de la posición de la semilla.
De forma que el resultado es: semilla[19] + semilla[22] + semilla[64] + semilla[40] + semilla[6] + semilla[0];
Lo cierto, es que el método de "encriptación" es simétrico y tiene función inversa, que es la que acabamos de explicar. Una vez descrito el proceso no costaría nada hacer la versión que encripta.
Espero que la explicación os haya resultado satisfactoria.