Article: Q130005
Product(s): Microsoft FoxPro
Version(s):
Operating System(s):
Keyword(s): kbcode kbnokeyword kbvfp300 kbvfp500 kbvfp600
Last Modified: 13-AUG-1999
-------------------------------------------------------------------------------
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
=============================================================================