X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fcrypto%2Fclass_CryptoHelper.php;h=2335f5dc5a534855c556de2034d315fe8b2c1206;hp=004ea24f6bcf357964463bbcb4db052952224dbf;hb=3de33dfa34616e40f816621bd191b536148ae2cb;hpb=49f84a522f0ccac3b70728cd41011a0be0eed8cf diff --git a/inc/classes/main/crypto/class_CryptoHelper.php b/inc/classes/main/crypto/class_CryptoHelper.php index 004ea24f..2335f5dc 100644 --- a/inc/classes/main/crypto/class_CryptoHelper.php +++ b/inc/classes/main/crypto/class_CryptoHelper.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007 - 2009 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -37,14 +37,14 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { private $rngInstance = null; /** - * Salt for hashing operations + * Instance of the crypto stream */ - private $salt = ''; + private $cryptoStreamInstance = null; /** - * Seperator on many places + * Salt for hashing operations */ - private $seperator '|'; + private $salt = ''; /** * Protected constructor @@ -72,6 +72,9 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { // Initialize the hasher $cryptoInstance->initHasher(); + // Attach a crypto stream + $cryptoInstance->attachCryptoStream(); + // Return the instance return $cryptoInstance; } @@ -86,12 +89,29 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { if (is_null(self::$selfInstance)) { // Then get a new one self::$selfInstance = self::createCryptoHelper(); - } + } // END - if // Return the instance return self::$selfInstance; } + /** + * Attaches a crypto stream to this crypto helper by detecting loaded + * modules. + * + * @return void + */ + protected function attachCryptoStream () { + // Do we have mcrypt loaded? + if ($this->isPhpExtensionLoaded('mcrypt')) { + // Then use it + $this->cryptoStreamInstance = ObjectFactory::createObjectByName('McryptStream', array($this->rngInstance())); + } else { + // If nothing works ... + $this->cryptoStreamInstance = ObjectFactory::createObjectByName('NullCryptoStream'); + } + } + /** * Initializes the hasher for different purposes. * @@ -115,7 +135,7 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { $randomString = $this->rngInstance->randomString(); // Get config entry for salt length - $length = $this->getConfigInstance()->readConfig('salt_length'); + $length = $this->getConfigInstance()->getConfigEntry('salt_length'); // Keep only defined number of characters $this->salt = substr(sha1($randomString), -$length, $length); @@ -141,7 +161,7 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { // Is the old password set? if (!empty($oldHash)) { // Use the salt from hash, first get length - $length = $this->getConfigInstance()->readConfig('salt_length'); + $length = $this->getConfigInstance()->getConfigEntry('salt_length'); // Then extract the X first characters from the hash as our salt $salt = substr($oldHash, 0, $length); @@ -149,7 +169,7 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { // Hash the password with salt //* DEBUG: */ echo "salt=".$salt."/plain=".$str."
\n"; - $hashed = $salt . md5(sprintf($this->getConfigInstance()->readConfig('hash_mask'), + $hashed = $salt . md5(sprintf($this->getConfigInstance()->getConfigEntry('hash_mask'), $salt, $this->rngInstance->getFixedSalt(), $str @@ -166,58 +186,8 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { * @return $encrypted Encrypted string */ public function encryptString ($str) { - // Init crypto module - $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); - $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); - - // Get key - if ($this->getConfigInstance()->readConfig('crypt_fixed_salt') == 'Y') { - $key = md5($this->rngInstance->getFixedSalt()); - } else { - $key = md5($this->rngInstance->getExtraSalt()); - } - - // Add some "garbage" to the string - switch ($this->rngInstance->randomNumber(0, 8)) { - case 0: - $garbageString = crc32($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . crc32($this->rngInstance->randomString(20)); - break; - - case 1: - $garbageString = crc32($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . md5($this->rngInstance->randomString(20)); - break; - - case 2: - $garbageString = crc32($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . sha1($this->rngInstance->randomString(20)); - break; - - case 3: - $garbageString = md5($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . crc32($this->rngInstance->randomString(20)); - break; - - case 4: - $garbageString = md5($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . md5($this->rngInstance->randomString(20)); - break; - - case 5: - $garbageString = md5($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . sha1($this->rngInstance->randomString(20)); - break; - - case 6: - $garbageString = sha1($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . crc32($this->rngInstance->randomString(20)); - break; - - case 7: - $garbageString = sha1($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . md5($this->rngInstance->randomString(20)); - break; - - case 8: - $garbageString = sha1($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . sha1($this->rngInstance->randomString(20)); - break; - } - - // Encrypt the string - $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $garbageString, MCRYPT_MODE_ECB, $iv); + // Encrypt the string through the stream + $encryted = $this->cryptoStreamInstance->encryptStream($str); // Return the string return $encrypted; @@ -230,31 +200,8 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { * @return $str The unencrypted string */ public function decryptString ($encrypted) { - // Init crypto module - $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); - $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); - - // Get key - if ($this->getConfigInstance()->readConfig('crypt_fixed_salt') == 'Y') { - $key = md5($this->rngInstance->getFixedSalt()); - } else { - $key = md5($this->rngInstance->getExtraSalt()); - } - - // Decrypt the string - $garbageString = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_ECB, $iv); - - // Get the real string out - $strArray = explode($this->seperator, $garbageString); - - // Does the element count match? - assert(count($strArray) == 3); - - // Decode the string - $str = base64_decode($strArray[1]); - - // Trim trailing nulls away - $str = rtrim($str, "\0"); + // Encrypt the string through the stream + $str = $this->cryptoStreamInstance->decryptStream($encrypted); // Return the string return $str;