248 Zeilen
		
	
	
	
		
			5,7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			248 Zeilen
		
	
	
	
		
			5,7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * This file is part of MySQLDumper released under the GNU/GPL 2 license
 | |
|  * http://www.mysqldumper.net
 | |
|  *
 | |
|  * @package         MySQLDumper
 | |
|  * @subpackage      Encryption
 | |
|  * @version         SVN: $Rev$
 | |
|  * @author          $Author$
 | |
|  */
 | |
| /**
 | |
|  * Class for text en- and decryption.
 | |
|  *
 | |
|  * @package         MySQLDumper
 | |
|  * @subpackage      Encryption
 | |
|  */
 | |
| class Msd_Crypt
 | |
| {
 | |
|     /**
 | |
|      * Holds the encryption descriptor
 | |
|      *
 | |
|      * @var resource
 | |
|      */
 | |
|     private $_encDescriptor = null;
 | |
| 
 | |
|     /**
 | |
|      * Holds the initialization vector
 | |
|      *
 | |
|      * @var resource
 | |
|      */
 | |
|     private $_initVector = null;
 | |
| 
 | |
|     /**
 | |
|      * Holds the algorithm wichc is currently used.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     private $_algorithm = MCRYPT_TWOFISH;
 | |
| 
 | |
|     /**
 | |
|      * Holds the current encryption key.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     private $_encryptionKey = null;
 | |
| 
 | |
|     /**
 | |
|      * Instance of this class.
 | |
|      *
 | |
|      * @var Msd_Crypt
 | |
|      */
 | |
|     private static $_instance = null;
 | |
| 
 | |
|     /**
 | |
|      * Identificator for encrypted text
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     private $_cryptIdent = 'Z';
 | |
| 
 | |
|     /**
 | |
|      * Class constructor
 | |
|      *
 | |
|      * @param string $cryptKey  Encryption key
 | |
|      * @param string $algorithm Algorithm for encryption
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     private function __construct($cryptKey = null, $algorithm = null)
 | |
|     {
 | |
|         if ($cryptKey === null) {
 | |
|             $cryptKey = md5(time());
 | |
|         }
 | |
|         if ($algorithm === null) {
 | |
|             $algorithm = $this->_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();
 | |
|     }
 | |
| }
 | |
| 
 |