Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Where to Store LoginId/Password?
Message
De
01/07/2004 07:13:55
 
 
À
30/06/2004 12:57:02
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00919101
Message ID:
00919561
Vues:
8
Hi Tracy,

I've been experimenting with those routines you sent me, but there was an issue that I couldn't work around.

In some cases the wordhide() procedure seems to give unexpected results (I might be wrong). Below is a test case I created calling it:
_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

For I = 1 to 6

    cOrigPass = TabStrings [I]

    cObjtPass = wordhide (cOrigPass)
    cBackPass = wordhide (cObjtPass)

    Messagebox ("cOrigPass: " + cOrigPass + Chr (13) + ;
                "cObjtPass: " + cObjtPass + Chr (13) + ;
                "cBackPass: " + cBackPass)
    
EndFor    

*******************************************
* 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
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
It's a known issue or am I doing something wrong?

Hope to count on your assistance and patience <s>

Regards,

Fernando
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform