_xldata=.T. Dimension TabStrings [6] TabStrings [1] = "MyPassord" TabStrings [2] = "This one works" TabStrings [3] = "But this one doesn't!" TabStrings [4] = "This one works: 0a1b2c" TabStrings [5] = "This one doesn't: 00a11b22c" TabStrings [6] = "adm003216" && This is, actually, a valid administrator login CREATE TABLE ctest (cOPass c(50), cObPass c(100), cBPass c(50)) For I = 1 to 6 APPEND BLANK cOrigPass = TabStrings [I] REPLACE ctest.cOPass WITH cOrigPass cObjtPass = wordhide (cOrigPass) REPLACE ctest.cObPass WITH cObjtPass cBackPass = wordhide (cObjtPass) REPLACE ctest.cBPass WITH cBackPass CLEAR mvalue = '' FOR ia = 1 TO LEN(cBackPass) IF ASC(SUBSTR(cBackPass,ia, 1)) > 0 mvalue = mvalue + SUBSTR(cBackPass,ia, 1) ENDIF ENDFOR mvalue1 = '' FOR ib = 1 TO LEN(cObjtPass) IF ASC(SUBSTR(cObjtPass,ib, 1)) > 0 mvalue1 = mvalue1 + SUBSTR(cObjtPass,ib, 1) ENDIF ENDFOR cBackPass = mvalue REPLACE ctest.cBPass WITH cBackPass Messagebox ("cOrigPass: " + cOrigPass + Chr (13) + ; "cObjtPass: " + mvalue1 + Chr (13) + ; "cBackPass: " + ctest.cBPass) EndFor BROWSE USE IN ctest ******************************************* * Psuedo 16bit data encryption algorithm. * * Useage: <str1>=wordhide(<str2>) * Convert back: <str3>=wordhide(<str1>) * ******************************************* * PROCEDURE wordhide PARAMETER xstr *--03/18/2003 TCH IF UPPER(TYPE('_xldata'))=="U" PRIVATE _xldata _xldata=.F. ENDIF PRIVATE i,j,ret,xval,temp newstr = xstr IF _xldata newstr = "" * Get pairs of characters from the string FOR k = 1 TO LEN(xstr) STEP 2 v3=ASC(SUBSTR(xstr,k+1,1)) + ; ASC(SUBSTR(xstr,k,1)) * 256 * Don't encrypt 2 spaces together. IF v3=8224 v4=v3 ELSE v4=messybits(v3) ENDIF v1 = 0 v2 = 0 IF v4 >= 256 v1 = INT(v4 / 256) v4 = v4 - (v1 * 256) ENDIF v2 = INT(v4) newstr=newstr+CHR(v1)+CHR(v2) ENDFOR ENDIF ? newstr RETURN newstr ***************************** PROCEDURE messybits ***************************** * This routine takes a 16bit number (0 - 65535), converts it to BINARY and * then rearranges the BITS for data encryption. PARAMETER dword PRIVATE _i,_j,retval,_xval,temp retval = "" FOR _j = 15 TO 0 STEP -1 IF dword >= 2^_j retval=retval+"1" dword = dword - 2^_j ELSE retval=retval+"0" ENDIF ENDFOR * Move through 16 bits, get every 4th bit and make new binary number temp = "" FOR _i = 1 TO 4 FOR _j = 0 TO 3 temp = temp + SUBSTR(retval,_i+(_j*4),1) ENDFOR ENDFOR retval=temp * Convert the BINARY number back to decimal and, just * for fun, flip the BINARY number backwards as we do it. _xval=0 FOR _j = 1 TO LEN(retval) IF SUBSTR(retval,_j,1) = "1" _xval = _xval + 2^(_j-1) ENDIF ENDFOR RETURN _xval