_algorithm; } $this->init($cryptKey, $algorithm); } /** * Get the instance of this class. * * @param string $cryptKey Encryption key * @param string $algorithm Algorithm for encryption * * @return Msd_Crypt */ public static function getInstance($cryptKey = null, $algorithm = null) { if (self::$_instance === null) { self::$_instance = new self($cryptKey, $algorithm); } return self::$_instance; } /** * Initializes the encryption descriptor. * * @param string $encryptionKey Key for encryption * @param string $algorithm Algorithm for encryption * * @return void */ public function init($encryptionKey = null, $algorithm = null) { if ($encryptionKey === null) { $encryptionKey = $this->_encryptionKey; } if ($algorithm === null) { $algorithm = $this->_algorithm; } if (!is_resource($this->_encDescriptor)) { $this->_encDescriptor = mcrypt_module_open( $algorithm, '', MCRYPT_MODE_ECB, '' ); $vectorSize = mcrypt_enc_get_iv_size($this->_encDescriptor); $this->_initVector = mcrypt_create_iv($vectorSize, MCRYPT_RAND); $keySize = mcrypt_enc_get_key_size($this->_encDescriptor); $key = substr(md5($encryptionKey), 0, $keySize); mcrypt_generic_init( $this->_encDescriptor, $key, $this->_initVector ); $this->_encryptionKey = $encryptionKey; } } /** * Uninitialize the encryption descriptor. * * @return void */ public function deinit() { if (is_resource($this->_encDescriptor)) { mcrypt_generic_deinit($this->_encDescriptor); } } /** * Close the encryption descriptor * * @return void */ public function close() { $this->deinit(); if (is_resource($this->_encDescriptor)) { mcrypt_module_close($this->_encDescriptor); } $this->_encDescriptor = null; } /** * Decodes an base64 encoded string. * * @param string $encodedString base64 encoded string * * @return sting */ private function _base64Decode($encodedString) { if (substr($encodedString, 0, 1) !== $this->_cryptIdent) { return $encodedString; } $encodedString = str_replace( array('.', '_', '-'), array('+', '/', '='), substr($encodedString, 1) ); $decodedString = base64_decode($encodedString); return $decodedString; } /** * Encode a string into base64 notation. * * @param string $plainString Plaintext * * @return string */ private function _base64Encode($plainString) { $encodedString = base64_encode($plainString); $encodedString = str_replace( array('+', '/', '='), array('.', '_', '-'), $encodedString ); return $this->_cryptIdent . $encodedString; } /** * Decrypts a text. * * @param string $encryptedText Text to decrypt * * @return string */ public function decrypt($encryptedText) { $encryptedText = $this->_base64Decode($encryptedText); if (!is_resource($this->_encDescriptor)) { $this->init($this->_encryptionKey); } $clearText = mdecrypt_generic( $this->_encDescriptor, $encryptedText ); return trim($clearText); } /** * Encrypts a text * * @param string $clearText Text to encrypt * * @return string */ public function encrypt($clearText) { if (!is_resource($this->_encDescriptor)) { $this->init(); } $encryptedText = mcrypt_generic( $this->_encDescriptor, $clearText ); return $this->_base64Encode($encryptedText); } /** * Class destructor * * @return void */ public function __destruct() { $this->close(); } }