Use JSL para cifrar scripts para el desarrollo de complementosMantengo un par de complementos y para algunos de ellos me gustaría actualizar un par de variables en los scripts contenidos en el momento de la compilación. Así que me gustaría escribir un script que abra un archivo de script, realice algunas concatenaciones o sustituciones y luego cifre todo el archivo y lo guarde en una ubicación determinada (para obtener una lista de archivos de script). Entonces puedo usar el brillante generador de complementos al @Justin_Chilton para construir los complementos. No encuentro una función JSL para encriptar un script, ¿existe o se puede hacer con otra utilidad?
Automatización y secuencias de comandosFusión y limpieza de datosRe: Usar JSL para cifrar scripts para el desarrollo de complementosGracias. Esa variable quedó de una primera versión, antes de darme cuenta de que quería ser una solución JSON.
Esto es similar a lo que hace JMP con un archivo PER (no JSON); también puede bloquear otras variables, como un nombre de usuario o de sitio, agregándolas a la concatenación.
Debe usar ShowGlobals() después de ejecutar su aplicación para asegurarse de que su secreto no sea demasiado fácil de descubrir.
Re: Usar JSL para cifrar scripts para el desarrollo de complementosGracias @Craige_Hales esa es una solución interesante que incorpora la fecha de vencimiento y una suma de verificación.
Pequeña solución para un error de codificación en la línea 5:
mySecretKey = "The quick brown fox";
aa = [=> ];
aa["expiredate"] = "1jan2022";
aa["checkcode"] = Hex( Blob MD5( Char To Blob( mySecretKey || aa["expiredate"] ) ) );
Save Text File( "$temp/license.txt", As JSON Expr( aa ) );
///////////////////
bb = Parse JSON( Load Text File( "$temp/license.txt" ) );
If( Hex( Blob MD5( Char To Blob( mySecretKey || bb["expiredate"] ) ) ) == bb["checkcode"],
Print( "ok: " || bb["expiredate"] ),
Print( "bad" )
);
Re: Usar JSL para cifrar scripts para el desarrollo de complementos¿algo como esto?
mySecretKey = "The quick brown fox";
aa = [=> ];
aa["expiredate"] = "1jan2022";
aa["checkcode"] = Hex( Blob MD5( Char To Blob( mySecretKey || expiredate ) ) );
Save Text File( "$temp/license.txt", As JSON Expr( aa ) );
///////////////////
bb = Parse JSON( Load Text File( "$temp/license.txt" ) );
If( Hex( Blob MD5( Char To Blob( mySecretKey || bb["expiredate"] ) ) ) == bb["checkcode"],
Print( "ok: " || bb["expiredate"] ),
Print( "bad" )
);
incruste la clave secreta en el script encriptado para que pueda verificarlo.
el archivo parece
{"código de control":"B7611676E821AA1ECC4CB5D6F02C6BA9","fecha de caducidad":"1 de enero de 2022"}
Re: Usar JSL para cifrar scripts para el desarrollo de complementos¡Gracias por las sugerencias!
La idea es crear un complemento autodestructivo que funcione por un tiempo y después de una fecha deje de funcionar (proteger IP). Entonces, cada vez que construyo el complemento, quiero una nueva fecha de caducidad codificada en el script para que esto no se pueda anular editando un campo de fecha en alguna parte. Si pongo la fecha de caducidad en un archivo de script externo, tengo que cifrarlo manualmente cada vez. Por la misma razón, una tabla de datos no es una opción.
Re: Usar JSL para cifrar scripts para el desarrollo de complementosTal vez use un archivo jsl/jmp/plaintext con solo los valores, e incluya () o abra () o cargue el archivo de texto () desde el script encriptado.
Una pequeña tabla de datos podría ser una buena opción para un conjunto de parámetros con nombre. O un fragmento de JSL que se incluye para establecer algunas variables. Un archivo llamado X.jsl con solo el texto 42 se puede cargar como parm = include("x.jsl"); y podrías hacer conjuntos más complicados con una lista si X contiene {42,"Fred"}, algo así como {parm,name} = include("x.jsl");
Re: Usar JSL para cifrar scripts para el desarrollo de complementosEl comando Encrypt Script se puede pasar a través de JSL utilizando la función Main Menu().
Main Menu( "encrypt script","Script 10" );
donde "Script 10" es el nombre de la ventana del script que se cifrará.
Sin embargo, lo que sucede a continuación es que aparece la ventana de diálogo que solicita las contraseñas, y no creo que eso sea lo que desea.