Ignoring the problems of philosophy and export, I would suggest that you would be better off encrypting the data in the table directly.
You need to obfuscate the decryption key in your code. As a rule, this means breaking them into pieces and encoding strings in hexadecimal form and using functions to assemble key fragments.
For the algorithm, I would use a robust implementation of AES for any language that you use. Maybe this is for C #:
http://msdn.microsoft.com/en-us/magazine/cc164055.aspx
Finally, you need to know the limitations of this approach. Namely, the decryption key is a weak link; it will be available in memory at run time in clear text. (At a minimum) It should be so that you can use it. Implementing your encryption scheme is another weakness - there are any flaws and flaws in your code. As several others have indicated that your client-server messages are also suspected.
You must remember that your executable can be viewed in a hex editor, in which clear-text strings will jump out of random garbage, which is your compiled code. And that many languages โโ(e.g. C #, for example) can be compiled with write-back, and all that will be missing are comments.
Everything that is said, encrypting your data, will raise the bar for deception. How much depends on how careful you are? but even so a determined adversary will still break your encryption and deception. In addition, they are likely to write a tool that will simplify your popularity; At this point, you will be offered an arms race scenario.
Regarding the value of the checksum, you can calculate the checksum based on the sum of the values โโin the string, assuming that for this purpose you have enough numerical values โโin your database. Or, for a bunch of booleans, you can save them in the varbinary field and use the bitwise exclusive operator ^ to compare them - you should get 0s.
For example,
for numeric columns,
2 | 3 | 5 | 7 | with a checksum column | 17 |
for booleans,
0 | 1 | 0 | 1 | with a checksum column | 0101 |
If you do this, you can even add a summary line at the end that summarizes your checksums. Although this can be problematic if you are constantly adding new entries. You can also convert strings to your ANSI / UNICODE components and summarize them too.
Then, when you want to check the checksum, just make a selection as follows:
Select * FROM OrigTable right outer join (select pk, (col1 + col2 + col3) as OnTheFlyChecksum, PreComputedChecksum from OrigTable) OT on OrigTable.pk = OT.pk where OT.OnTheFlyChecksum = OT.PreComputedChecksum