Visual FoxPro - Encrypt and Decrypt Files - SweetPotato Software Blog
Visual FoxPro - Encrypt and Decrypt Files - SweetPotato Software Blog
IMPORTANT:
The functions within this FLL have changed. Please refer to the latest
documention for the VFP Encryption FLL that can be found at the
following link:
Major VFP Encryption Update
Work on the vfpencryption.fll continues at a steady pace (whenever a minute or two presents itself). I’ve
finished fixing a couple more bugs that were reported to me and I’ve finished the EncryptFile() and
DecryptFile() functions. Here is the download link and some additional information regarding the FLL that
will be of use to developers who are using it.
Download the Latest Version of the VFP Encryption FLL (58 KB approx.)
Function ENCRYPT()
Signature: Encrypt(cStringtoEncrypt, cSecretKey[, nEncryptionType[, nEncryptionMode]])
Parameters:
cStringtoEncrypt – A plain text string that you want to have encrypted, such as “Hello World!”
cSecretKey – A plain text string that is the Key you want used during encryption, such as
“My_SeCrEt_KeY”.
Please note that keys may need to be of a particular length for certain types of encryption. Refer below for
more information.
nEncryptionType – There are currently 5 types of encryption available. The value of this parameter
determines that type of encryption used and how long your Secret Key should be. A single character in
Visual FoxPro is equal to 1 byte or 8 bits. So an encryption algorithm requiring a 128-bit key would need
a Secret Key of 16 characters (16 x 8 = 128).
0 = AES128 (requires a 16 character Key)
1 = AES192 (requires a 24 character Key)
2 = AES256 (requires a 32 character Key) *Default
4 = Blowfish (requires a 56 character Key)
8 = TEA (requires a 16 character Key)
nEncryptionMode – There are three different modes available for the each of the encryption types listed
above. They include: Electronic Code Book (ECB), Cipher Block Chaining (CBC) and Cipher Feedback
Block (CFB).
0 = ECB *Default
1 = CBC
2 = CFB
Return Value:
Character data type – the encrypted form of cStringtoEncrypt.
Remarks:
When saving the return value of Encrypt() function to a field in a table, remember that Visual FoxPro will
append blanks to the end of the string in order to fill the character field to its designated length. This can
cause problems when decrypting the data as the spaces will be considered part of the encrypted string.
To work around this, I suggest placing a single CHR(0) at the end of the encrypted string when saving it to
the table. Then when decrypting the data just the portion prior to the CHR(0) can be sent into the
Decrypt() function.
www.sweetpotatosoftware.com/blog/index.php/2005/09/01/visual-foxpro-encrypt-and-decrypt-files/ 1/4
24/5/2019 Visual FoxPro – Encrypt and Decrypt Files – SweetPotato Software Blog
Function DECRYPT()
Signature: Decrypt(cEncryptString, cSecretKey[, nDecryptionType[, nDecryptionMode]])
Parameters:
cEncryptedString – A string that has been encrypted using the Encrypt() function.
cSecretKey – A plain text string that is the same Key that you used when you encrypted the data using
the Encrypt function, such as “My_SeCrEt_KeY”.
Please note that keys may need to be of a particular length for certain types of decryption. Refer below for
more information.
nDecryptionType – There are currently 5 types of decryption available and they correspond to the same
ones available in Encrypt(). A single character in Visual FoxPro is equal to 1 byte or 8 bits. So
an decryption algorithm requiring a 128-bit key would need a Secret Key of 16 characters (16 x 8 = 128).
0 = AES128 (requires a 16 character Key)
1 = AES192 (requires a 24 character Key)
2 = AES256 (requires a 32 character Key) *Default
4 = Blowfish (requires a 56 character Key)
8 = TEA (requires a 16 character Key)
nDecryptionMode – There are three different modes available for the each of the encryption types listed
above. They include: Electronic Code Book (ECB), Cipher Block Chaining (CBC) and Cipher Feedback
Block (CFB).
0 = ECB *Default
1 = CBC
2 = CFB
Return Value:
Character data type – the decrypted form of cEncryptedString followed by a variable number of CHR(0)s.
See Remarks below for further clarification
Remarks:
IMPORTANT: Decryption is done on blocks of memory, so when the decrypt function returns the
encrypted string it will be followed by a variable number of CHR(0)s unless the decrypted string just
happens to end at exactly the same location as the last block decrypted. These extraneous CHR(0)’s can
be removed using a number of Visual FoxPro functions, such as STRTRAN(), CHRTRAN(), or a
combination of LEFT() and AT().
Function ENCRYPTFILE()
Signature: EncryptFile(cFiletoEncrypt, cDestinationFile, cSecretKey[, nEncryptionType[,
nEncryptionMode]])
Parameters:
cFiletoEncrypt – A plain text string that is the fullpath to the file you wish to be encrypted, such as
“C:\SensitiveInfo.doc”
cDestinationFile – A plain text string that is the fullpath to an encrypted file you wish to have created on
disk, such as “C:\EncryptedInfo.doc”. If this file doesn’t exist then it will be created for you.
cSecretKey – A plain text string that is the Key you want used during encryption, such as
“My_SeCrEt_KeY”.
Please note that keys may need to be of a particular length for certain types of encryption. Refer below for
more information.
nEncryptionType – There are currently 5 types of encryption available. The value of this parameter
determines that type of encryption used and how long your Secret Key should be. A single character in
Visual FoxPro is equal to 1 byte or 8 bits. So an encryption algorithm requiring a 128-bit key would need
a Secret Key of 16 characters (16 x 8 = 128).
0 = AES128 (requires a 16 character Key)
1 = AES192 (requires a 24 character Key)
2 = AES256 (requires a 32 character Key) *Default
4 = Blowfish (requires a 56 character Key)
8 = TEA (requires a 16 character Key)
nEncryptionMode – There are three different modes available for the each of the encryption types listed
above. They include: Electronic Code Book (ECB), Cipher Block Chaining (CBC) and Cipher Feedback
Block (CFB).
www.sweetpotatosoftware.com/blog/index.php/2005/09/01/visual-foxpro-encrypt-and-decrypt-files/ 2/4
24/5/2019 Visual FoxPro – Encrypt and Decrypt Files – SweetPotato Software Blog
0 = ECB *Default
1 = CBC
2 = CFB
Return Value:
None
Remarks:
Currently the cFiletoEncrypt and cDestinationFile parameters cannot point to the same file. This may be
revised in a future version. But for safety sake, this function requires that the original file be left
untouched.
Function DECRYPTFILE()
Signature: DecryptFile(cEncryptedFile, cDestinationFile, cSecretKey[, nDecryptionType[,
nDecryptionMode]])
Parameters:
cEncyptedFile – A plain text string that is the fullpath to the file you wish to be decrypted, such as
“C:\EncryptedInfo.doc”
cDestinationFile – A plain text string that is the fullpath to a decrypted file you wish to have created on
disk, such as “C:\SensitiveInfo.doc”. If this file doesn’t exist then it will be created for you.
cSecretKey – A plain text string that is the same Key that you used when you encrypted the data using
the Encrypt function, such as “My_SeCrEt_KeY”.
Please note that keys may need to be of a particular length for certain types of decryption. Refer below for
more information.
nDecryptionType – There are currently 5 types of decryption available and they correspond to the same
ones available in Encrypt(). A single character in Visual FoxPro is equal to 1 byte or 8 bits. So
an decryption algorithm requiring a 128-bit key would need a Secret Key of 16 characters (16 x 8 = 128).
0 = AES128 (requires a 16 character Key)
1 = AES192 (requires a 24 character Key)
2 = AES256 (requires a 32 character Key) *Default
4 = Blowfish (requires a 56 character Key)
8 = TEA (requires a 16 character Key)
nDecryptionMode – There are three different modes available for the each of the encryption types listed
above. They include: Electronic Code Book (ECB), Cipher Block Chaining (CBC) and Cipher Feedback
Block (CFB).
0 = ECB *Default
1 = CBC
2 = CFB
Return Value:
None
Remarks:
As with EncryptFile(), the cFiletoEncrypt and cDestinationFile parameters cannot point to the same file.
Function HASH()
Signature: Hash(cStringtoHash[, nHashType])
Parameters:
cStringtoHash – A plain text string you wish to have hashed
nHashType – The type of hash function to generate. There are currently 7 different hash functions
supported
1 = SHA1 (a.k.a SHA160)
2 = SHA256
3 = SHA384
4 = SHA512 *Default
5 = MD5
6 = RIPEMD128
7 = RIPEMD256
www.sweetpotatosoftware.com/blog/index.php/2005/09/01/visual-foxpro-encrypt-and-decrypt-files/ 3/4
24/5/2019 Visual FoxPro – Encrypt and Decrypt Files – SweetPotato Software Blog
Return Value:
Binary Character Data – the hash for cStringtoHash.
Remarks:
The hash is returned as a series of binary characters. However, it is more common to see hashes in a
hexBinary format. This can be accomplished in Visual FoxPro by taking the return of the Hash() function
and sending it in as a parameter to the STRCONV() function. For example:
?STRCONV(Hash(“Some String”), 15) && hexBinary Hash
www.sweetpotatosoftware.com/blog/index.php/2005/09/01/visual-foxpro-encrypt-and-decrypt-files/ 4/4