DataFlex
DataFlex
Duplicate PHP RSA Encryption
See more RSA Examples
Demonstrates how to duplicate the following PHP function.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
String sRsaMOD
String sRsaEXP
Handle hoBdMod
Handle hoBdExp
Handle hoXml
Variant vPubkey
Handle hoPubkey
Handle hoRsa
String sPlainText
String sCipherText
String sTemp1
Boolean bTemp1
Move False To iSuccess
// 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
Move "F0946D8F05604809E24B8CFFD30349CEA9E5F4D320BFD9E9AA1B088863F02C43E7997D37A3E27B4F8F359F1744DB6B20A437067C0D325A80660D12FF56A57673" To sRsaMOD
// The RSA exponent in hex is "010001", which is 65537 in decimal. It's typically the exponent that is always used.
Move "010001" To sRsaEXP
// Get the RSA modulus and exponent in base64.
Get Create (RefClass(cComChilkatBinData)) To hoBdMod
If (Not(IsComObjectCreated(hoBdMod))) Begin
Send CreateComObject of hoBdMod
End
Get Create (RefClass(cComChilkatBinData)) To hoBdExp
If (Not(IsComObjectCreated(hoBdExp))) Begin
Send CreateComObject of hoBdExp
End
Get ComAppendEncoded Of hoBdMod sRsaMOD "hex" To iSuccess
Get ComAppendEncoded Of hoBdExp sRsaEXP "hex" To iSuccess
// Build the XML representation of the RSA public key
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Set ComTag Of hoXml To "RSAPublicKey"
Get ComGetEncoded Of hoBdMod "base64" To sTemp1
Send ComUpdateChildContent To hoXml "Modulus" sTemp1
Get ComGetEncoded Of hoBdExp "base64" To sTemp1
Send ComUpdateChildContent To hoXml "Exponent" sTemp1
// Load the RSA public key into a Chilkat public key object.
Get Create (RefClass(cComChilkatPublicKey)) To hoPubkey
If (Not(IsComObjectCreated(hoPubkey))) Begin
Send CreateComObject of hoPubkey
End
Get ComGetXml Of hoXml To sTemp1
Get ComLoadFromString Of hoPubkey sTemp1 To iSuccess
// Setup the RSA object for encryption and do it..
Get Create (RefClass(cComChilkatRsa)) To hoRsa
If (Not(IsComObjectCreated(hoRsa))) Begin
Send CreateComObject of hoRsa
End
Set ComVerboseLogging Of hoRsa To True
Get pvComObject of hoPubkey to vPubkey
Get ComUsePublicKey Of hoRsa vPubkey To iSuccess
// Use PKCSv1.5 padding
Set ComPkcsPadding Of hoRsa To True
// Encrypt and return the string as hex.
Set ComEncodingMode Of hoRsa To "hex"
Move "key=abcdefghijkmnopq&iv=abcdefghijkmnopq&h=12345678&s=12345678" To sPlainText
Get ComEncryptStringENC Of hoRsa sPlainText False To sCipherText
Get ComLastMethodSuccess Of hoRsa To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoRsa To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Showln sCipherText
End_Procedure