Sample code for 30+ languages & platforms
Visual FoxPro

Duplicate PHP RSA Encryption

See more RSA Examples

Demonstrates how to duplicate the following PHP function.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcRsaMOD
LOCAL lcRsaEXP
LOCAL loBdMod
LOCAL loBdExp
LOCAL loXml
LOCAL loPubkey
LOCAL loRsa
LOCAL lcPlainText
LOCAL lcCipherText

lnSuccess = 0

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

* Duplicate the following PHP code:
* 
*    public function encryptRSA($plainText,$rsaMOD,$pubKEY){
*         $rsa  = new RSA();
*         $rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
*         $publicKey = [
*             'e' => new BigInteger($pubKEY,16),
*             'n' => new BigInteger($rsaMOD,16)
*         ];
* 		
*         $rsa->loadKey($publicKey);
*         $ciphertext = $rsa->encrypt($plainText);
*         return bin2hex($ciphertext);
*     }
* 
*     $plainText="key=abcdefghijkmnopq&iv=abcdefghijkmnopq&h=12345678&s=12345678"
*     $rsaMOD="F0946D8F05604809E24B8CFFD30349CEA9E5F4D320BFD9E9AA1B088863F02C43E7997D37A3E27B4F8F359F1744DB6B20A437067C0D325A80660D12FF56A57673"
*     $pubKEY="010001"

* We have the RSA modulus in hex
lcRsaMOD = "F0946D8F05604809E24B8CFFD30349CEA9E5F4D320BFD9E9AA1B088863F02C43E7997D37A3E27B4F8F359F1744DB6B20A437067C0D325A80660D12FF56A57673"

* The RSA exponent in hex is "010001", which is 65537 in decimal.  It's typically the exponent that is always used.
lcRsaEXP = "010001"

* Get the RSA modulus and exponent in base64.
loBdMod = CreateObject('Chilkat.BinData')
loBdExp = CreateObject('Chilkat.BinData')
lnSuccess = loBdMod.AppendEncoded(lcRsaMOD,"hex")
lnSuccess = loBdExp.AppendEncoded(lcRsaEXP,"hex")

* Build the XML representation of the RSA public key
loXml = CreateObject('Chilkat.Xml')
loXml.Tag = "RSAPublicKey"
loXml.UpdateChildContent("Modulus",loBdMod.GetEncoded("base64"))
loXml.UpdateChildContent("Exponent",loBdExp.GetEncoded("base64"))

* Load the RSA public key into a Chilkat public key object.
loPubkey = CreateObject('Chilkat.PublicKey')
lnSuccess = loPubkey.LoadFromString(loXml.GetXml())

* Setup the RSA object for encryption and do it..
loRsa = CreateObject('Chilkat.Rsa')
loRsa.VerboseLogging = 1
lnSuccess = loRsa.UsePublicKey(loPubkey)

* Use PKCSv1.5 padding
loRsa.PkcsPadding = 1

* Encrypt and return the string as hex.
loRsa.EncodingMode = "hex"
lcPlainText = "key=abcdefghijkmnopq&iv=abcdefghijkmnopq&h=12345678&s=12345678"
lcCipherText = loRsa.EncryptStringENC(lcPlainText,0)
IF (loRsa.LastMethodSuccess = 0) THEN
    ? loRsa.LastErrorText
    RELEASE loBdMod
    RELEASE loBdExp
    RELEASE loXml
    RELEASE loPubkey
    RELEASE loRsa
    CANCEL
ENDIF

* Note: The PKCSv1_5 padding incorporates random bytes.  Therefore, the RSA encryption will produce different results each time -- all of which are valid 
* and decrypt correctly to the same original text.
? lcCipherText

RELEASE loBdMod
RELEASE loBdExp
RELEASE loXml
RELEASE loPubkey
RELEASE loRsa