<FONT FACE=monospace>Will these 2 function help? they only work on strings so you will have to convert other field types to a string before playing with it.<br><br><br>*/***************************************************************************<br>*/Program : function CODEIN<br>*/System :<br>*/Purpose : Scrambles a string into an unreadable form<br>*/Syntax : = CodeIn(Str,CodeSeed)<br>*/Returns : String<br>*/Parameter : String - Str - The String to Be Scrambled<br>*/ : Integer - Seed - Number to offset the asc code by<br>*/Defaults : None<br>*/Requires : None<br>*/Changes : Nothing<br>*/Internal Calls : None<br>*/External Calls : None<br>*/Version : 1.0<br>*/Dated : 02/03/1989<br>*/Written By: David W. Grewe<br>*/***************************************************************************<br>*& Utility - Security<br>*/***************************************************************************<br>*/ Record Of Change<br>*/<br>*/***************************************************************************<br>parameters P_STR, P_SEED<br>private P_STR, P_SEED<br>private L_PARA, L_LEN, L_CODEIN, L_PLACE<br>L_PARA = parameters()<br>do case<br>case L_PARA < 1 .or. type('P_Str') # 'C'<br> wait window "Function L_CodeIn, Needs To Be Passes A String To Code"<br> return " "<br>case L_PARA < 2 .or. type('P_Seed') # "N"<br> P_SEED = 10<br>endcase<br>*******<br>P_SEED = iif(P_SEED > 20, 17, P_SEED) + 95<br>P_STR = trim(P_STR)<br>L_LEN = len(P_STR)<br>L_CODEIN = ''<br>*******<br>*** encryption routine<br>*******<br>for I = 1 to L_LEN<br> L_PLACE = asc(substr(P_STR,I,1)) + P_SEED - I<br> L_CODEIN = L_CODEIN + chr(L_PLACE)<br>endfor<br>******<br>release P_STR, P_SEED, L_PARA, L_LEN, L_PLACE<br>return L_CODEIN<br><br>*/***************************************************************************<br>*/Program : function CODEOUT<br>*/System :<br>*/Purpose : Unscrambles A string, Scrambled with Function CodeIn, <br>*/ : back to a readable form<br>*/Syntax : = CodeOut(Str,Seed)<br>*/Returns : String<br>*/Parameter : String - Str - The String to Be UnScrambled<br>*/ : Integer - Seed - Number To Offset The AscCode By(must be the same as Codein)<br>*/Defaults : None<br>*/Requires : None<br>*/Changes : Nothing<br>*/Internal Calls : None<br>*/External Calls : None<br>*/Calls : <br>*/Version : 1.0<br>*/Dated : 02/03/1989<br>*/Written By: David W. Grewe<br>*/***************************************************************************<br>*& Utility - Security<br>*/***************************************************************************<br>*/ Record Of Change<br>*/<br>*/***************************************************************************<br>parameters P_STR, P_SEED<br>private all like P_*, L_*<br>L_PARA = parameters()<br>do case<br>case L_PARA < 1 .or. type("P_Str"

# "C"<br> wait window "Function L_CodeOut, Needs To Be Passes A String To UnCode"<br> return " "<br>case L_PARA < 2 .or. type("P_Seed"

# "N"<br> P_SEED = 10<br>endcase<br>P_SEED = iif(P_SEED > 20, 17, P_SEED) + 95<br>P_STR = trim(P_STR)<br>L_LEN = len(P_STR)<br>L_CODEOUT = ""<br>*********************<br>*** decoding routine<br>*********************<br>for I = 1 to L_LEN<br> L_PLACE = asc(substr(P_STR,I,1)) - P_SEED + I<br> if L_PLACE < 32 .or. L_PLACE > 128<br> wait window "The string was not Scrambled with Function CodeIn"<br> return " "<br> else<br> L_CODEOUT = L_CODEOUT + chr(L_PLACE)<br> endif<br>endfor<br>******<br>return L_CODEOUT<br></font><br><br><br>here is a sample routine on using them The VARMEM.DAT is just a dbf renamed and the VARMEM.DIF is a IDX renamed. Figured if the person breaking into the system knew it used DBF's and CDX's the DAT and DIF would help delay the action<br><br><FONT FACE=monospace><br>*/***************************************************************************<br>*/Program : Function varaccs<br>*/System :<br>*/Purpose : Fills / changes the F_ variables passed to it from the information in the Network Database<br>*/Syntax : Do UserFind<br>*/Returns : Nothing<br>*/Parameter : Nothing<br>*/Default : Nothing<br>*/Requires : A Database Named Network and the uc* Memvars previously declaired public<br>*/Calls : <br>*/Version : 1.0<br>*/Dated : 02/04/1989<br>*/Written By: David W. Grewe<br>*/***************************************************************************<br>*& Utility-Security<br>*/***************************************************************************<br>*/ Record Of Change<br>*/ <br>*/***************************************************************************<br>parameters P_NetName<br>if parameters() # 1<br> P_Netname = ucNetName<br>endif<br>***********************<br>on error quit<br>L_Alias = alias()<br>if used("VARMEM"

<br> select VARMEM<br>else<br> select 0<br> use VARMEM.DAT alias VARMEM<br>endif<br>set index to VARMEM.DIF<br>*<br>* Get the new user information<br>*<br>set exact on<br>P_NetName = codein(P_NetName)<br>Seek P_NetName<br>L_passback = .f.<br>if found()<br> ucNetName = alltrim(codeout(VARMEM.ID))<br> ucPassWord = alltrim(codeout(VARMEM.FILE))<br> unSecurity = val(codeout(VARMEM.TYPE))<br> ucDrive = iif(codeout(VARMEM.DRIVE) = " ", "C", codeout(VARMEM.DRIVE))+ ":"<br> ucPerson = substr(codeout(VARMEM.NAME), 1, at(" ",codeout(VARMEM.NAME))-1)<br> ucTitle = alltrim(codeout(VARMEM.TITLE))<br> F_Pdriver = alltrim(codeout(VARMEM.PRINTER))<br> L_passback = .t.<br>endif <br>set exact off<br>use<br>do errcall<br>if ! empty(L_Alias)<br> select (L_Alias)<br>endif<br>return l_passback<br></font> <p>David W. Grewe<br><a href=mailto

ave@internationalbid.net>Dave@internationalbid.net</a><br><a href= > </a><br>