X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fcrypto%2Fclass_CryptoHelper.php;h=03458ee5f17f138d8f4695978bf57f4669c1d4a5;hb=c3021952494266e05bfa9046baf9bcd11bfe7d13;hp=db35284416ecb4011caa28f565c43f455dfcc56d;hpb=2c0148a84570f1a8343fa6b98a279e903b3e4fa2;p=core.git diff --git a/inc/classes/main/crypto/class_CryptoHelper.php b/inc/classes/main/crypto/class_CryptoHelper.php index db352844..03458ee5 100644 --- a/inc/classes/main/crypto/class_CryptoHelper.php +++ b/inc/classes/main/crypto/class_CryptoHelper.php @@ -2,11 +2,11 @@ /** * A helper class for cryptographical things like hashing passwords and so on * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.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 @@ -29,17 +29,12 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { /** * An instance of this own clas */ - private static $selfInstance = null; - - /** - * Instance of the random number generator - */ - private $rngInstance = null; + private static $selfInstance = NULL; /** * Instance of the crypto stream */ - private $cryptoStreamInstance = null; + private $cryptoStreamInstance = NULL; /** * Salt for hashing operations @@ -61,7 +56,7 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { * * @return $cryptoInstance An instance of this crypto helper class */ - public final static function createCryptoHelper () { + public static final function createCryptoHelper () { // Get a new instance $cryptoInstance = new CryptoHelper(); @@ -80,7 +75,7 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { * * @return $selfInstance An instance of this crypto helper class */ - public final static function getInstance () { + public static final function getSelfInstance () { // Is no instance there? if (is_null(self::$selfInstance)) { // Then get a new one @@ -128,7 +123,7 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { */ private function generateSalt () { // Get a random string from the RNG - $randomString = $this->getRngInstance()->randomString(); + $randomString = $this->getRngInstance()->randomString() . $this->createUuid(); // Get config entry for salt length $length = $this->getConfigInstance()->getConfigEntry('salt_length'); @@ -137,6 +132,26 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { $this->salt = substr(sha1($randomString), -$length, $length); } + /** + * Returns a UUID (Universal Unique IDentifier) if PECL extension uuid was + * found or an empty string it not. + * + * @return $uuid UUID with leading dash or empty string + */ + public function createUuid () { + // Init empty UUID + $uuid = ''; + + // Is the UUID extension loaded? (see pecl) + if ((extension_loaded('uuid')) && (function_exists('uuid_create'))) { + // Then add it as well + $uuid = uuid_create(); + } // END - if + + // Return it + return $uuid; + } + /** * 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 @@ -145,9 +160,10 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { * * @param $str Unhashed string * @param $oldHash A hash from previous hashed string + * @param $withFixed Whether to include a fixed salt (not recommended in p2p applications) * @return $hashed The hashed and salted string */ - public function hashString ($str, $oldHash = '') { + public function hashString ($str, $oldHash = '', $withFixed = TRUE) { // Cast the string $str = (string) $str; @@ -165,11 +181,20 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { // Hash the password with salt //* DEBUG: */ echo "salt=".$salt."/plain=".$str."
\n"; - $hashed = $salt . md5(sprintf($this->getConfigInstance()->getConfigEntry('hash_mask'), - $salt, - $this->getRngInstance()->getFixedSalt(), - $str - )); + if ($withFixed === TRUE) { + // Use additional fixed salt + $hashed = $salt . md5(sprintf($this->getConfigInstance()->getConfigEntry('hash_extra_mask'), + $salt, + $this->getRngInstance()->getFixedSalt(), + $str + )); + } else { + // Use salt+string to hash + $hashed = $salt . md5(sprintf($this->getConfigInstance()->getConfigEntry('hash_normal_mask'), + $salt, + $str + )); + } // And return it return $hashed; @@ -179,11 +204,12 @@ class CryptoHelper extends BaseFrameworkSystem implements Cryptable { * Encrypt the string with fixed salt * * @param $str The unencrypted string + * @param $key Optional key, if none provided, a random key will be generated * @return $encrypted Encrypted string */ - public function encryptString ($str) { + public function encryptString ($str, $key = NULL) { // Encrypt the string through the stream - $encrypted = $this->cryptoStreamInstance->encryptStream($str); + $encrypted = $this->cryptoStreamInstance->encryptStream($str, $key); // Return the string return $encrypted;