Sample code for 30+ languages & platforms
Visual FoxPro

Encrypt File to PKCS7 .p7m

See more Encryption Examples

_LANGUAGE_ example to public-key encrypt a file creating a PKCS#7 .p7m file as output. Also demonstrates how to decrypt the .p7m to recover the original file.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loCrypt
LOCAL loEncryptCert
LOCAL lcInFile
LOCAL lcOutFile
LOCAL loDecrypt
LOCAL lcPfxFilename
LOCAL lcPfxPassword

lnSuccess = 0

* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loCrypt = CreateObject('Chilkat.Crypt2')

* Indicate the public-key encryption is to be used.
* Do this by setting the encryption algorithm equal 
* to "PKI" (an acroynm for public-key infrastructure).
loCrypt.CryptAlgorithm = "PKI"

* Indicate the inner symmetric encryption algorithm to be used.
* possible values are "aes", "des", "3des", and "rc2".
* For this example, we'll use 256-bit AES encryption.
loCrypt.Pkcs7CryptAlg = "aes"
loCrypt.KeyLength = 256

* To encrypt, only a certificate w/ public key is needed.
* (The certificate w/ private key is required for decryption.)

* The LoadFromFile method can load virtually any certificate format:
* 1. DER encoded binary X.509 (.CER)
* 2. Base-64 encoded X.509 (.CER)
* 3. Cryptographic Message Syntax Standard - PKCS #7 Certificates (.P7B)
* 4. PEM format
loEncryptCert = CreateObject('Chilkat.Cert')
lnSuccess = loEncryptCert.LoadFromFile("/Users/chilkat/testData/cer/acme.cer")
IF (lnSuccess <> 1) THEN
    ? loEncryptCert.LastErrorText
    RELEASE loCrypt
    RELEASE loEncryptCert
    CANCEL
ENDIF

* Tell the crypt object to use the certificate for encrypting:
loCrypt.AddEncryptCert(loEncryptCert)

* Encrypt a file, producing a .p7m as output.
* The input file is unchanged, the output .p7m contains the encrypted
* contents of the input file.
lcInFile = "/Users/chilkat/testData/pdf/sample.pdf"
lcOutFile = "/Users/chilkat/testData/p7m/sample.pdf.p7m"
lnSuccess = loCrypt.CkEncryptFile(lcInFile,lcOutFile)
IF (lnSuccess <> 1) THEN
    ? loCrypt.LastErrorText
    RELEASE loCrypt
    RELEASE loEncryptCert
    CANCEL
ENDIF

* For demonstration purposes, a different instance of the object will be used
* for decryption.
loDecrypt = CreateObject('Chilkat.Crypt2')

* To decrypt, the certificate w/ private key is required.  A PFX (also known
* as PKCS#12) is a common secure container for certs and private keys.
lcPfxFilename = "/Users/chilkat/testData/pfx/acme.pfx"
lcPfxPassword = "secret"

* Tell the component to look in the PFX file for certs and private keys.
lnSuccess = loDecrypt.AddPfxSourceFile(lcPfxFilename,lcPfxPassword)
IF (lnSuccess <> 1) THEN
    ? loDecrypt.LastErrorText
    RELEASE loCrypt
    RELEASE loEncryptCert
    RELEASE loDecrypt
    CANCEL
ENDIF

* Tell the decrypt object that PKI (public key encryption) is to be used
* for decryptiong.
loDecrypt.CryptAlgorithm = "PKI"
* There is no need to set the Pkcs7Alg or KeyLength because this information
* is contained within the .p7m

* Decrypt the .p7m
lcInFile = "/Users/chilkat/testData/p7m/sample.pdf.p7m"
lcOutFile = "/Users/chilkat/testData/pdf/recovered.pdf"
lnSuccess = loDecrypt.CkDecryptFile(lcInFile,lcOutFile)
IF (lnSuccess = 0) THEN
    ? loDecrypt.LastErrorText
    RELEASE loCrypt
    RELEASE loEncryptCert
    RELEASE loDecrypt
    CANCEL
ENDIF

? "Success!"

RELEASE loCrypt
RELEASE loEncryptCert
RELEASE loDecrypt