protected static function mcrypt_exists() { if (!isset(self::$mcrypt_exists)) { self::$mcrypt_exists = function_exists('mcrypt_encrypt'); } return self::$mcrypt_exists; }
protected static function aes_cbc_decrypt($crypted, $key, $iv) { $key_size = self::$key_size; if (!isset(self::$openssl_decrypt_exists)) { self::$openssl_decrypt_exists = function_exists('openssl_decrypt') && version_compare(PHP_VERSION, '5.3.3', '>='); // We need $iv parameter. } if (self::$openssl_decrypt_exists) { return openssl_decrypt($crypted, "aes-{$key_size}-cbc", $key, true, $iv); } if (!isset(self::$mcrypt_exists)) { self::$mcrypt_exists = function_exists('mcrypt_encrypt'); } if (self::$mcrypt_exists) { $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); if (mcrypt_generic_init($cipher, $key, $iv) != -1) { $decrypted = mdecrypt_generic($cipher, $crypted); mcrypt_generic_deinit($cipher); mcrypt_module_close($cipher); return self::remove_pkcs7_pad($decrypted); } return false; } if (!isset(self::$openssl_cli_exists)) { self::$openssl_cli_exists = self::openssl_cli_exists(); } if (self::$openssl_cli_exists) { $string = base64_encode($crypted); $cmd = 'echo ' . self::escapeshellarg($string) . ' | openssl enc -d -a -A -aes-' . $key_size . '-cbc -K ' . self::strtohex($key) . ' -iv ' . self::strtohex($iv); exec($cmd, $output, $return); if ($return == 0 && isset($output[0])) { return $output[0]; } return false; } trigger_error('GibberishAES: System requirements failure, please, check them.', E_USER_WARNING); return false; }