Well, I can help you develop an encryption system.
You can have the client encrypt the code its sending to the server using its defined keys and a product key of its own so it doesn't decrypt the wrong thing and try to run it… Just say the word and I'll build that portion of the code.
What if you're already sending hashed data?
It decodes the file character by character. The player defined keys would be A-Z 1-0 and punctuation…
So if you did mess up in your message…
I like pupies
to
A WLMS ETELSG
It would simply bring back
A WLMS ETELSG
to
I like pupies
As long as both keys are correct.
If you sent in already encrypted data and lost the key, then you are not gonna be able to decode it using the program.
[EDIT] Plus you also have the product keys which will probably be in the format of 1A2B-3C4D-5E6F to prevent the decoder from decoding the rest of the file if the product keys are incorrect.
[EDIT2]Which if I calculated correctly makes 6,582,952,005,840,035,281 or around 6.582 + 10
18 (If you know scientific notation) possible combinations if both letters and numbers was used through out the entire product code. The numbers may be letters and the letters may be numbers within the example I put above so it will be very hard to actually get 2 of them IF you tried.