From 835b51ff59baba0e2707bd7e138ac5a511a31adb Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Mon, 25 Aug 2008 17:52:28 +0000 Subject: [PATCH] wp_rand() - more randy rands git-svn-id: https://develop.svn.wordpress.org/trunk@8728 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-includes/pluggable.php | 44 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/wp-includes/pluggable.php b/wp-includes/pluggable.php index a74b3c281d..ea6ccacee1 100644 --- a/wp-includes/pluggable.php +++ b/wp-includes/pluggable.php @@ -1351,11 +1351,53 @@ function wp_generate_password($length = 12, $special_chars = true) { $password = ''; for ( $i = 0; $i < $length; $i++ ) - $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); + $password .= substr($chars, wp_rand(0, strlen($chars) - 1), 1); return $password; } endif; +if ( !function_exists('wp_rand') ) : + /** + * Generates a random number + * + * @since 2.6.2 + * + * @param int $min Lower limit for the generated number (optional, default is 0) + * @param int $max Upper limit for the generated number (optional, default is 4294967295) + * @return int A random number between min and max + */ +function wp_rand( $min = 0, $max = 0 ) { + global $rnd_value; + + $seed = get_option('random_seed'); + + // Reset $rnd_value after 14 uses + // 32(md5) + 40(sha1) + 40(sha1) / 8 = 14 random numbers from $rnd_value + if ( strlen($rnd_value) < 8 ) { + $rnd_value = md5( uniqid(microtime() . mt_rand(), true ) . $seed ); + $rnd_value .= sha1($rnd_value); + $rnd_value .= sha1($rnd_value . $seed); + $seed = md5($seed . $rnd_value); + update_option('random_seed', $seed); + } + + // Take the first 8 digits for our value + $value = substr($rnd_value, 0, 8); + + // Strip the first eight, leaving the remainder for the next call to wp_rand(). + $rnd_value = substr($rnd_value, 8); + + $value = abs(hexdec($value)); + + // Reduce the value to be within the min - max range + // 4294967295 = 0xffffffff = max random number + if ( $max != 0 ) + $value = $min + (($max - $min + 1) * ($value / (4294967295 + 1))); + + return abs(intval($value)); +} +endif; + if ( !function_exists('wp_set_password') ) : /** * Updates the user's password with a new encrypted one.