X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fclasses%2Fmain%2Frng%2Fclass_RandomNumberGenerator.php;h=1e702c9769174eb55c8606479eaf462920a458a6;hb=6ea47cac34fd28b9d8157ceb1d643f7bfc6a4379;hp=12e1c01820925c40bc87efe88f383c6881d8044a;hpb=1cfec479b8c4a745b5b97683d22c8a431f9a3ee7;p=shipsimu.git diff --git a/inc/classes/main/rng/class_RandomNumberGenerator.php b/inc/classes/main/rng/class_RandomNumberGenerator.php index 12e1c01..1e702c9 100644 --- a/inc/classes/main/rng/class_RandomNumberGenerator.php +++ b/inc/classes/main/rng/class_RandomNumberGenerator.php @@ -37,6 +37,11 @@ class RandomNumberGenerator extends BaseFrameworkSystem { */ private $extraSalt = ""; + /** + * Fixed salt for secured hashing + */ + private $fixedSalt = ""; + /** * Maximum length for random string */ @@ -66,14 +71,15 @@ class RandomNumberGenerator extends BaseFrameworkSystem { /** * Creates an instance of this class * + * @param $extraInstance An extra instance for more salt (default: null) * @return $rngInstance An instance of this random number generator */ - public final static function createRandomNumberGenerator () { + public final static function createRandomNumberGenerator (FrameworkInterface $extraInstance = null) { // Get a new instance $rngInstance = new RandomNumberGenerator(); // Initialize the RNG now - $rngInstance->initRng(); + $rngInstance->initRng($extraInstance); // Return the instance return $rngInstance; @@ -82,12 +88,11 @@ class RandomNumberGenerator extends BaseFrameworkSystem { /** * Initializes the random number generator * + * @param $extraInstance An extra instance for more salt (default: null) * @return void + * @todo Add site key for stronger salt! */ - protected function initRng () { - // Seed mt_rand() - mt_srand((double) microtime() * 1000000); - + protected function initRng ($extraInstance) { // Get the prime number from config $this->prime = $this->getConfigInstance()->readConfig('math_prime'); @@ -95,6 +100,9 @@ class RandomNumberGenerator extends BaseFrameworkSystem { // a better prime number $this->extraNumber = ($this->prime * $this->prime / (pi() ^ 2)); + // Seed mt_rand() + mt_srand((double) sqrt(microtime() * 100000000 * $this->extraNumber)); + // Set the server IP to cluster $serverIp = "cluster"; @@ -102,11 +110,19 @@ class RandomNumberGenerator extends BaseFrameworkSystem { if ($this->getConfigInstance()->readConfig('is_single_server') == "Y") { // Then use that IP for extra security $serverIp = getenv('SERVER_ADDR'); + } // END - if + + // Yet-another fixed salt. This is not dependend on server software or date + if ($extraInstance instanceof FrameworkInterface) { + // With extra instance information + $this->fixedSalt = sha1($serverIp . ":" . $extraInstance->__toString() . ":" . serialize($this->getDatabaseInstance()->getConnectionData()) . ":" . $extraInstance->getObjectDescription()); + } else { + // Without extra information + $this->fixedSalt = sha1($serverIp . ":" . serialize($this->getDatabaseInstance()->getConnectionData())); } // One-way data we need for "extra-salting" the random number - /* @TODO Add site key for stronger salt! */ - $this->extraSalt = sha1($serverIp . ":" . getenv('SERVER_SOFTWARE') . ":" . $this->getConfigInstance()->readConfig('date_key') . ":" . serialize($this->getDatabaseInstance()->getConnectionData())); + $this->extraSalt = sha1($this->fixedSalt . ":" . getenv('SERVER_SOFTWARE') . ":" . $this->getConfigInstance()->readConfig('date_key')); // Get config entry for max salt length $this->rndStrLen = $this->getConfigInstance()->readConfig('rnd_str_length'); @@ -118,7 +134,7 @@ class RandomNumberGenerator extends BaseFrameworkSystem { * @param $length Length of the string, default: 128 * @return $randomString The pseudo-random string */ - public function makeRandomString ($length = -1) { + public function randomString ($length = -1) { // Is the number <1, then fix it to default length if ($length < 1) $length = $this->rndStrLen; @@ -128,10 +144,10 @@ class RandomNumberGenerator extends BaseFrameworkSystem { // And generate it for ($idx = 0; $idx < $length; $idx++) { // Add a random character and add it to our string - $randomString .= chr($this->randomNumnber(0, 255)); + $randomString .= chr($this->randomNumber(0, 255)); } - // Return the random string mixed up + // Return the random string a little mixed up return str_shuffle($randomString); } @@ -141,9 +157,9 @@ class RandomNumberGenerator extends BaseFrameworkSystem { * @param $min Min value to generate * @param $max Max value to generate * @return $num Pseudo-random number + * @todo I had a better random number generator here but now it is somewhere lost :( */ - public function randomNumnber ($min, $max) { - /* @TODO I had a better random number generator here */ + public function randomNumber ($min, $max) { return mt_rand($min, $max); } @@ -155,6 +171,15 @@ class RandomNumberGenerator extends BaseFrameworkSystem { public final function getExtraSalt () { return $this->extraSalt; } + + /** + * Getter for fixed salt + * + * @return $fixedSalt + */ + public final function getFixedSalt () { + return $this->fixedSalt; + } } // [EOF]