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
(PHP ActiveX) 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
<?php // 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; // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.Crypt2') $crypt = new COM("Chilkat.Crypt2"); $text = 'This is a test'; $passphrase = 'my password'; // 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. $crypt->EncodingMode = 'base64'; $ivBase64 = $crypt->genRandomBytesENC(16); print 'Generated IV = ' . $ivBase64 . "\n"; // 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. // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.BinData') $bdKey = new COM("Chilkat.BinData"); $bdKey->AppendString($passphrase,'utf-8'); $sz = $bdKey->NumBytes; if ($sz > 32) { $bdKey->RemoveChunk(32,$sz - 32); } else { $bdKey->Clear(); $bdKey->AppendPadded($passphrase,'utf-8',0,32); } // Setup for encryption. $crypt->CryptAlgorithm = 'aes'; $crypt->KeyLength = 256; $crypt->SetEncodedIV($ivBase64,'base64'); $crypt->SetEncodedKey($bdKey->getEncoded('base64'),'base64'); // Encrypt and base64 encode. $cipherText64 = $crypt->encryptStringENC($text); // The PHP code fragment above returns the base64 encoded bytes of the IV and the encrypted text. // So let's do that.. // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.BinData') $bd = new COM("Chilkat.BinData"); $bd->AppendEncoded($ivBase64,'base64'); $bd->AppendEncoded($cipherText64,'base64'); $result = $bd->getEncoded('base64'); print 'result = ' . $result . "\n"; // Sample output: // dN0vS1O0cWi5BbLAAY+NTf7bs3S27xzPf11RkG47sjs= // Now let's decrypt from the output... // Setup for decryption. $crypt->CryptAlgorithm = 'aes'; $crypt->KeyLength = 256; $crypt->SetEncodedKey($bdKey->getEncoded('base64'),'base64'); // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.BinData') $bdResult = new COM("Chilkat.BinData"); $bdResult->AppendEncoded($result,'base64'); $crypt->SetEncodedIV($bdResult->getEncodedChunk(0,16,'base64'),'base64'); // Remove the IV (first 16 bytes) from the result. $bdResult->RemoveChunk(0,16); $success = $crypt->DecryptBd($bdResult); $originalText = $bdResult->getString('utf-8'); print 'original text = ' . $originalText . "\n"; ?> |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.