DOCUMENT:Q130005 13-AUG-1999 [foxpro] TITLE :HOWTO: Use a Custom Class to Encrypt Passwords PRODUCT :Microsoft FoxPro PROD/VER: OPER/SYS: KEYWORDS:kbcode kbnokeyword kbvfp300 kbvfp500 kbvfp600 ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual FoxPro for Windows, versions 3.0, 5.0, 6.0 ------------------------------------------------------------------------------- SUMMARY ======= Many applications require a level of security that necessitates password protection. Password validation requires comparing passwords to a list of acceptable passwords, normally stored in table form. This article demonstrates how to create a custom class that encrypts passwords and allows passwords to be manipulated in encrypted form, allowing a higher level of security. MORE INFORMATION ================ The following code sample demonstrates how to use a Custom Class to encrypt and decrypt a password. The password can then be used in encrypted form for added security. Code Sample ----------- * Beginning of pwdclass.prg * * To use this program, run it; then type the password in the upper-left * text box, and press ENTER. The Encrypt_It procedure in the FxtoolFormdes * instance of the PASS_WORD class is called in the valid of the text box. * The encrypted password is displayed in the lower-left text. * Pressing the Decrypt It! button calls the Decrypt_It procedure * in the custPassword instance of the PASS_WORD class. The resulting * value is displayed in the text box below the Decrypt It! button. ************* frmPwdform = CREATEOBJECT("pwdform") && Instantiate class from pwdform. frmPwdform.VISIBLE = .T. READ EVENTS * Define Form Class: DEFINE CLASS pwdform AS FORM CAPTION = "Password Encryption Example" ADD OBJECT custPassword AS PASS_WORD && Add Password object to form. HEIGHT = 130 WIDTH = 350 AUTOCENTER = .T. ADD OBJECT txtText1 AS TEXTBOX WITH ; HEIGHT = 25, ; LEFT = 25, ; TOP = 20, ; WIDTH = 125, ; PASSWORDCHAR = "*", ; NAME = "txtText1" ADD OBJECT txtText2 AS TEXTBOX WITH ; HEIGHT = 25, ; LEFT = 25, ; TOP = 72, ; WIDTH = 125, ; READONLY = .T., ; NAME = "txtText2" * Command button to demonstrate the call to Decrypt_It procedure is * contained in cmdCommand1.click in the following procedure: ADD OBJECT cmdCommand1 AS COMMANDBUTTON WITH ; TOP = 20, ; LEFT = 200, ; HEIGHT = 29, ; WIDTH = 125, ; CAPTION = "Decrypt It!", ; NAME = "cmdCommand1" * Textbox to display Unencrypted password: ADD OBJECT txtText3 AS TEXTBOX WITH ; CONTROLSOURCE = "THISFORM.custPassword.cUnencrypted", ; HEIGHT = 25, ; LEFT = 200, ; READONLY = .T., ; TOP = 72, ; WIDTH = 125, ; NAME = "Text3" PROCEDURE txtText1.LOSTFOCUS THISFORM.custPassword.Encrypt_It(TRIM(THIS.VALUE)) THISFORM.txtText2.VALUE = THISFORM.custPassword.cEncrypted THISFORM.cmdCommand1.SETFOCUS ENDPROC PROCEDURE cmdCommand1.CLICK THISFORM.custPassword.Decrypt_It(THISFORM.custPassword.cEncrypted) THISFORM.REFRESH THISFORM.txtText1.SETFOCUS ENDPROC PROCEDURE DESTROY CLEAR EVENTS ENDPROC ENDDEFINE DEFINE CLASS PASS_WORD AS CUSTOM HEIGHT = 17 WIDTH = 100 cUnencrypted = "" cEncrypted = "" NAME = "Password" PROCEDURE Encrypt_It && Call this to encrypt password PARAMETERS cPassword cEncrypted_password = '' FOR i = 1 TO LEN(cPassword) cLetter = SUBSTR(cPassword, i, 1) cEncrypted_password = cEncrypted_password + ; CHR((ASC(cLetter)*2)+5) && Arbitrary encryption formula NEXT i THIS.cEncrypted = cEncrypted_password ENDPROC PROCEDURE Decrypt_It && Call this to Decrypt password PARAMETERS cPassword cUnencrypted_password = '' FOR i = 1 TO LEN(cPassword) cLetter = SUBSTR(cPassword, i, 1) cUnencrypted_password = cUnencrypted_password + ; CHR((ASC(cLetter)-5)/2) && Reverse of encryption formula NEXT i THIS.cUnencrypted = cUnencrypted_password ENDPROC ENDDEFINE * End of pwdclass.prg Additional query words: ====================================================================== Keywords : kbcode kbnokeyword kbvfp300 kbvfp500 kbvfp600 Technology : kbVFPsearch kbAudDeveloper kbVFP300 kbVFP500 kbVFP600 Issue type : kbhowto ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 1999.