* // Encrypt a string using the Mcrypt PHP extension * $encrypted = Crypter::encrpt('secret'); * * * @param string $value * @return string */ public static function encrypt($value) { // Determine the most appropriate random number generator for the // OS and system and environment the application is running on. if (defined('MCRYPT_DEV_URANDOM')) { $randomizer = MCRYPT_DEV_URANDOM; } elseif (defined('MCRYPT_DEV_RANDOM')) { $randomizer = MCRYPT_DEV_RANDOM; } else { $randomizer = MCRYPT_RAND; } $iv = mcrypt_create_iv(static::iv_size(), $randomizer); $key = Config::$items['application']['key']; return base64_encode($iv.mcrypt_encrypt(static::$cipher, $key, $value, static::$mode, $iv)); } /** * Decrypt a string using Mcrypt. * * * // Decrypt a string using the Mcrypt PHP extension * $decrypted = Crypter::decrypt($secret); * * * @param string $value * @return string */ public static function decrypt($value) { if ( ! is_string($value = base64_decode($value, true))) { throw new \Exception('Decryption error. Input value is not valid base64 data.'); } list($iv, $value) = static::parse($value); $key = Config::$items['application']['key']; return rtrim(mcrypt_decrypt(static::$cipher, $key, $value, static::$mode, $iv), "\0"); } /** * Parse an encrypted value into the input vector and the actual value. * * @param string $value * @return array */ protected static function parse($value) { return array(substr($value, 0, static::iv_size()), substr($value, static::iv_size())); } /** * Get the input vector size for the cipher and mode. * * Different ciphers and modes use varying lengths of input vectors. * * @return int */ protected static function iv_size() { return mcrypt_get_iv_size(static::$cipher, static::$mode); } }