1

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?

Nicola
  • 209
  • 1
  • 8

1 Answers1

1

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)

Guscarr
  • 394
  • 1
  • 7
  • I would need it to call a page created in Genexus from another site, also created with Genexus, so I think fuctions as Link does not work (different keys). I'll check the other solutions, thanks – Nicola Nov 02 '22 at 15:05
  • The link function worked for me. It creates an url with the encrypted parms and I can then replace the generated url with that of the other site called. Obviously they must have the same encryption key. Not a complete solution, but it's something – Nicola Nov 22 '22 at 07:32