* // 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); $value = mcrypt_encrypt(static::$cipher, static::key(), $value, static::$mode, $iv); return base64_encode($iv.$value); } /** * Decrypt a string using Mcrypt. * * @param string $value * @return string */ public static function decrypt($value) { list($iv, $value) = static::parse(base64_decode($value, true)); $value = mcrypt_decrypt(static::$cipher, static::key(), $value, static::$mode, $iv); return rtrim($value, "\0"); } /** * Parse an encrypted value into the input vector and the actual value. * * @param string $value * @return array */ protected static function parse($value) { if ($value === false) { throw new \Exception('Decryption error. Input value is not valid base64 data.'); } return array(substr($value, 0, static::iv_size()), substr($value, static::iv_size())); } /** * Get the input vector size for the cipher and mode. * * @return int */ protected static function iv_size() { return mcrypt_get_iv_size(static::$cipher, static::$mode); } /** * Get the encryption key from the application configuration. * * @return string */ protected static function key() { return Config::$items['application']['key']; } }