X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fcrypto%2Fclass_CryptoHelper.php;fp=inc%2Fclasses%2Fmain%2Fcrypto%2Fclass_CryptoHelper.php;h=0000000000000000000000000000000000000000;hb=bc5ab6fca061052ad58261118d8f8b38bf10ebbd;hp=0456e10dae2e1f8cb3c5a0929f9a1d7e66def337;hpb=7940f3ad709afe4ba58012aa835c82cecc9328cc;p=mailer.git diff --git a/inc/classes/main/crypto/class_CryptoHelper.php b/inc/classes/main/crypto/class_CryptoHelper.php deleted file mode 100644 index 0456e10dae..0000000000 --- a/inc/classes/main/crypto/class_CryptoHelper.php +++ /dev/null @@ -1,260 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -class CryptoHelper extends BaseFrameworkSystem implements Cryptable { - // Exception constants - const EXCEPTION_ENCRYPT_MISSING = 0x1f0; - const EXCEPTION_ENCRYPT_INVALID = 0x1f1; - - /** - * An instance of this own clas - */ - private static $selfInstance = null; - - /** - * Instance of the random number generator - */ - private $rngInstance = null; - - /** - * Salt for hashing operations - */ - private $salt = ""; - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - - // Clean up a little - $this->removeNumberFormaters(); - $this->removeSystemArray(); - } - - /** - * Creates an instance of this class - * - * @return $cryptoInstance An instance of this crypto helper class - */ - public final static function createCryptoHelper () { - // Get a new instance - $cryptoInstance = new CryptoHelper(); - - // Initialize the hasher - $cryptoInstance->initHasher(); - - // Return the instance - return $cryptoInstance; - } - - /** - * Get a singleton instance of this class - * - * @return $selfInstance An instance of this crypto helper class - */ - public final static function getInstance () { - // Is no instance there? - if (is_null(self::$selfInstance)) { - // Then get a new one - self::$selfInstance = self::createCryptoHelper(); - } - - // Return the instance - return self::$selfInstance; - } - - /** - * Initializes the hasher for different purposes. - * - * @return void - */ - protected function initHasher () { - // Initialize the random number generator which is required by some crypto methods - $this->rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class'); - - // Generate a salt for the hasher - $this->generateSalt(); - } - - /** - * Generates the salt based on configured length - * - * @return void - */ - private function generateSalt () { - // Get a random string from the RNG - $randomString = $this->rngInstance->randomString(); - - // Get config entry for salt length - $length = $this->getConfigInstance()->readConfig('salt_length'); - - // Keep only defined number of characters - $this->salt = substr(sha1($randomString), -$length, $length); - } - - /** - * Hashes a string with salt and returns the hash. If an old previous hash - * is supplied the method will use the first X chars of that hash for hashing - * the password. This is useful if you want to check if password is identical - * for authorization purposes. - * - * @param $str Unhashed string - * @param $oldHash A hash from previous hashed string - * @return $hashed The hashed and salted string - */ - public function hashString ($str, $oldHash = "") { - // Cast the string - $str = (string) $str; - - // Default is the default salt ;-) - $salt = $this->salt; - - // Is the old password set? - if (!empty($oldHash)) { - // Use the salt from hash, first get length - $length = $this->getConfigInstance()->readConfig('salt_length'); - - // Then extract the X first characters from the hash as our salt - $salt = substr($oldHash, 0, $length); - } // END - if - - // Hash the password with salt - //* DEBUG: */ echo "salt=".$salt."/plain=".$str."
\n"; - $hashed = $salt . md5(sprintf($this->getConfigInstance()->readConfig('hash_mask'), - $salt, - $this->rngInstance->getFixedSalt(), - $str - )); - - // And return it - return $hashed; - } - - /** - * Encrypt the string with fixed salt - * - * @param $str The unencrypted string - * @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))."|".base64_encode($str)."|".crc32($this->rngInstance->randomString(20)); - break; - - case 1: - $garbageString = crc32($this->rngInstance->randomString(10))."|".base64_encode($str)."|".md5($this->rngInstance->randomString(20)); - break; - - case 2: - $garbageString = crc32($this->rngInstance->randomString(10))."|".base64_encode($str)."|".sha1($this->rngInstance->randomString(20)); - break; - - case 3: - $garbageString = md5($this->rngInstance->randomString(10))."|".base64_encode($str)."|".crc32($this->rngInstance->randomString(20)); - break; - - case 4: - $garbageString = md5($this->rngInstance->randomString(10))."|".base64_encode($str)."|".md5($this->rngInstance->randomString(20)); - break; - - case 5: - $garbageString = md5($this->rngInstance->randomString(10))."|".base64_encode($str)."|".sha1($this->rngInstance->randomString(20)); - break; - - case 6: - $garbageString = sha1($this->rngInstance->randomString(10))."|".base64_encode($str)."|".crc32($this->rngInstance->randomString(20)); - break; - - case 7: - $garbageString = sha1($this->rngInstance->randomString(10))."|".base64_encode($str)."|".md5($this->rngInstance->randomString(20)); - break; - - case 8: - $garbageString = sha1($this->rngInstance->randomString(10))."|".base64_encode($str)."|".sha1($this->rngInstance->randomString(20)); - break; - } - - // Encrypt the string - $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $garbageString, MCRYPT_MODE_ECB, $iv); - - // Return the string - return $encrypted; - } - - /** - * Decrypt the string with fixed salt - * - * @param $encrypted Encrypted string - * @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("|", $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"); - - // Return the string - return $str; - } -} - -// [EOF] -?>