예제 #1
0
 protected static function mcrypt_exists()
 {
     if (!isset(self::$mcrypt_exists)) {
         self::$mcrypt_exists = function_exists('mcrypt_encrypt');
     }
     return self::$mcrypt_exists;
 }
예제 #2
0
 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;
 }