Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Duplicate PHP's openssl_encrypt and openssl_random_pseudo_bytesDemonstrates how to duplicate PHP's openssl_encrypt function. (https://www.php.net/manual/en/function.openssl-encrypt.php) For more information, see https://www.php.net/manual/en/function.openssl-encrypt.php
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Handle hoCrypt String sText String sPassphrase String sIvBase64 Key Handle hoBdKey Integer iSz String sCipherText64 Handle hoBd String sResult Result Handle hoBdResult String sOriginalText String sTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Duplicates thw following PHP script: // $text = "This is a test"; // $passphrase = "my password"; // $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("AES-256-CBC")); // $crypted = base64_encode($iv.openssl_encrypt($text, "AES-256-CBC", $passphrase, OPENSSL_RAW_DATA, $iv)); // echo $crypted; Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt If (Not(IsComObjectCreated(hoCrypt))) Begin Send CreateComObject of hoCrypt End Move "This is a test" To sText Move "my password" To sPassphrase // AES is a block cipher. The IV size for any block cipher is the size of the block, which is defined by the encryption algorithm. // For AES, the block size is always 16 bytes, regardless of key size (i.e. 128-bits, 192-bits, or 256-bits). // Therefore, generate 16 random bytes for the IV. Set ComEncodingMode Of hoCrypt To "base64" Get ComGenRandomBytesENC Of hoCrypt 16 To sIvBase64 Showln "Generated IV = " sIvBase64 // Because we're doing AES-256-CBC, the key length must be 256-bits (i.e. 32 bytes). // Given that our passphrase is a us-ascii string that can be shorter or longer than 32-bytes, we need to // somehow transform the passphrase to a 32-byte secret key. We need to know what openssl_encrypt does. // Here's the answer from the openssl_encrypt documentation: // // "If the passphrase is shorter than expected, it is silently padded with NUL characters; // if the passphrase is longer than expected, it is silently truncated." // OK.... so let's pad or shorten to get a 32-byte key. Get Create (RefClass(cComChilkatBinData)) To hoBdKey If (Not(IsComObjectCreated(hoBdKey))) Begin Send CreateComObject of hoBdKey End Get ComAppendString Of hoBdKey sPassphrase "utf-8" To iSuccess Get ComNumBytes Of hoBdKey To iSz If (iSz > 32) Begin Get ComRemoveChunk Of hoBdKey 32 (iSz - 32) To iSuccess End Else Begin Get ComClear Of hoBdKey To iSuccess Get ComAppendPadded Of hoBdKey sPassphrase "utf-8" False 32 To iSuccess End // Setup for encryption. Set ComCryptAlgorithm Of hoCrypt To "aes" Set ComKeyLength Of hoCrypt To 256 Send ComSetEncodedIV To hoCrypt sIvBase64 "base64" Get ComGetEncoded Of hoBdKey "base64" To sTemp1 Send ComSetEncodedKey To hoCrypt sTemp1 "base64" // Encrypt and base64 encode. Get ComEncryptStringENC Of hoCrypt sText To sCipherText64 // The PHP code fragment above returns the base64 encoded bytes of the IV and the encrypted text. // So let's do that.. Get Create (RefClass(cComChilkatBinData)) To hoBd If (Not(IsComObjectCreated(hoBd))) Begin Send CreateComObject of hoBd End Get ComAppendEncoded Of hoBd sIvBase64 "base64" To iSuccess Get ComAppendEncoded Of hoBd sCipherText64 "base64" To iSuccess Get ComGetEncoded Of hoBd "base64" To sResult Showln "result = " sResult // Sample output: // dN0vS1O0cWi5BbLAAY+NTf7bs3S27xzPf11RkG47sjs= // Now let's decrypt from the output... // Setup for decryption. Set ComCryptAlgorithm Of hoCrypt To "aes" Set ComKeyLength Of hoCrypt To 256 Get ComGetEncoded Of hoBdKey "base64" To sTemp1 Send ComSetEncodedKey To hoCrypt sTemp1 "base64" Get Create (RefClass(cComChilkatBinData)) To hoBdResult If (Not(IsComObjectCreated(hoBdResult))) Begin Send CreateComObject of hoBdResult End Get ComAppendEncoded Of hoBdResult sResult "base64" To iSuccess Get ComGetEncodedChunk Of hoBdResult 0 16 "base64" To sTemp1 Send ComSetEncodedIV To hoCrypt sTemp1 "base64" // Remove the IV (first 16 bytes) from the result. Get ComRemoveChunk Of hoBdResult 0 16 To iSuccess Get pvComObject of hoBdResult to vBdResult Get ComDecryptBd Of hoCrypt vBdResult To iSuccess Get ComGetString Of hoBdResult "utf-8" To sOriginalText Showln "original text = " sOriginalText End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.