Search code examples
genexus

How can I encrypt the parameters of a panel in the same way as Genexus?


We need to encrypt a string in the same way that Genexus (17U10 and csharp if it's important) encrypts the parameters of a panel using the site key.

To better understand, the first is the url with unencrypted parameters, the second is the same url with parameters encrypted via site key

http://localhost/TestVersione17U10.NETFrameworkEnvironment/webpanel3.aspx?par1=hello

http://localhost/TestVersione17U10.NETFrameworkEnvironment/webpanel3.aspx?ROndRLvw5t80mViNc0wdKO7XYc-OgWL61k9lDimrqI0

Reading in the wiki, I believe that genexus uses the key stored in the application.key file and uses the twofish algorithm.

7E2E22D26FF2989E2444852A85E57867

This is the key I have in the file, I tried in every way to get the second string starting from the first, but without success.

The native Encrypt64 method gave no results, the generated string is different.

I also noticed that the same parameters are encrypted differently when I call another panel, so I believe it somehow uses the panel name as well. ( webpanel2.aspx?mY8XtkZ-3eBJKsDIFk-zX3DP2PuQC2LHIkqwFtE1CZw )

What am I doing wrong? Is the key wrong? Do you use any other way to encrypt other than Encrypt64?


Solution

  • I’m not sure what you really want to implement. I mean, do you want storage this link? Do you need it in order to call from a “non GX application”?

    Anyway, as you said, object name is included in the algorithm to URL encryption. This algorithm is not available as a “function” to be used by GX developers directly. However, there are two ways to do something like that in Genexus:

    1. To use “link” function. https://wiki.genexus.com/commwiki/servlet/wiki?8444,Link%20Function

    2. To use non standard functions. Suppose you have “webpanel3.aspx par1=hello,par2=world” then the code could be something like:

      &GXKey = GetSiteKey()

      &GXEncryptionTmp = "webpanel3.aspx"+UrlEncode("hello”) + "," + UrlEncode("world")

      &EncryptedParms= "?" + UriEncrypt64( &GXEncryptionTmp + CheckSum(&GXEncryptionTmp, 6), &GXKey))

    Note: You must enable “non standard functions” (https://wiki.genexus.com/commwiki/servlet/wiki?8013,Standard%20Functions%20property%20at%20Object%20level)

    If you need to call from a non GX application, there are to options:

    1. To use a GX generated program as “proxy”. This object receive not encrypted parms and returns the encrypted URL or directly encrypt the parameters and call the corresponding object

    2. To explore object generated in order to mimic that code in your solution/code. This includes exploring GXClassses (i.e. https://github.com/genexuslabs/DotNetClasses)