/** * Encrypts a string and returns an encrypted string that can be decoded. * * @param string data to be encrypted * @return string encrypted data */ public function encode($data) { // Set the rand type if it has not already been set if (Encrypt::$rand === NULL) { if (KOHANA_IS_WIN) { // Windows only supports the system random number generator Encrypt::$rand = MCRYPT_RAND; } else { if (defined('MCRYPT_DEV_URANDOM')) { // Use /dev/urandom Encrypt::$rand = MCRYPT_DEV_URANDOM; } elseif (defined('MCRYPT_DEV_RANDOM')) { // Use /dev/random Encrypt::$rand = MCRYPT_DEV_RANDOM; } else { // Use the system random number generator Encrypt::$rand = MCRYPT_RAND; } } } if (Encrypt::$rand === MCRYPT_RAND) { // The system random number generator must always be seeded each // time it is used, or it will not produce true random results mt_srand(); } // Create a random initialization vector of the proper size for the current cipher $iv = mcrypt_create_iv($this->config['iv_size'], Encrypt::$rand); // Encrypt the data using the configured options and generated iv $data = mcrypt_encrypt($this->config['cipher'], $this->config['key'], $data, $this->config['mode'], $iv); // Use base64 encoding to convert to a string return base64_encode($iv . $data); }