viernes, 23 de junio de 2017

Encrypt URL parameters: Cifrado Manual de Parámetros con Site Key

Bueno en la anterior entrada revisamos la configuración para Cifrar los parámetros de la URL mediante Site Key y una forma automática de generar dichos enlaces. Para los que no, revisen el enlace aquí.

Pero si les paso lo que a mí, se deben de haber topado con la necesidad de generar esta URL de forma manual.

Bueno aquí corresponde una breve explicación de como Genexus realiza este cifrado de la URL.

Genexus utiliza el algoritmo TwoFish el cual está contenido en las funciones:

GetEncryptionKey, para obtener una llave o key de cifrado válida.
Encrypt64, para el cifrado en base a dicha llave.
Decrypt64, para el descifrado en base a una llave.

Genexus no solo cifra los parámetros sino que arma un string específico para el cifrado de los parámetros de la URL unido a un CheckSum de seis cifras, en el enlace pueden ver la documentación respectiva, aunque es del 2004, por lo que no ayudó mucho ya que ha habido un pequeño cambio en como se arma el String a cifrar.

Como vieron en la entrada anterior se mostró cómo configurar el Application.Key para administrar nuestras propias llaves. Gracias a esto se puede descifrar una URL y ver como está armada. Para mi caso actual usando Genexus Evolution 3 Upgrade 9. El cifrado de la URL corresponde a:

?objeto.aspxParametrosCheckSum

Siendo:

Objeto, nombre del web panel o transacción en minúsculas.
Parametros, los parámetros necesarios recibidos por el objeto separados por coma.
CheckSum, check sum del string formado por el objeto y los parámetros.

Entonces para cifrar correctamente de forma manual los parámetros de la url necesitamos armar dicho string y cifrarlo con las funciones ya mencionadas.

El código sería:

//cifrar parametros de url con Site Key
CSHARP [!&tempkey!] = Crypto.GetSiteKey( );
&toEnc = "webpanel" + '.aspx' + "param1" + ',' + "param2"
CSHARP [!&chkSum!] = Crypto.CheckSum( [!&toEnc!], 6);
&URL= &DominioSitio + '/webpanel.aspx?' + encrypt64(&toEnc+&chkSum, &tempkey)


Nótese que debemos usar las funciones Crypto.GetSiteKey() para obtener la llave usada en el cifrado y CryptoCheckSum() para generar el check sum de seis dígitos (por ello el parámetro de 6) con código Nativo C#.

No hay comentarios:

Publicar un comentario