pushrbx icon

Joomla Pw generator

pushrbx | PRO | 03/12/13 09:22:02 PM UTC | 0 ⭐ | 399 👁️ | Never ⏰ | []
PHP |

2.82 KB

|

None

|

0 👍

/

0 👎

<?php
function genRandomBytes($length = 16)
{
    $sslStr = '';
    if (
            function_exists('openssl_random_pseudo_bytes')
            && (version_compare(PHP_VERSION, '5.3.4') >= 0
                    || substr(PHP_OS, 0, 3) !== 'WIN'
            )
    )
    {
        $sslStr = openssl_random_pseudo_bytes($length, $strong);
        if ($strong)
        {
            return $sslStr;
        }
    }
 
    $bitsPerRound = 2;
    $maxTimeMicro = 400;
    $shaHashLength = 20;
    $randomStr = '';
    $total = $length;
 
    // Check if we can use /dev/urandom.
    $urandom = false;
    $handle = null;
    if (function_exists('stream_set_read_buffer') && @is_readable('/dev/urandom'))
    {
        $handle = @fopen('/dev/urandom', 'rb');
        if ($handle)
        {
            $urandom = true;
        }
    }
 
    while ($length > strlen($randomStr))
    {
        $bytes = ($total > $shaHashLength)? $shaHashLength : $total;
        $total -= $bytes;
 
        $entropy = rand() . uniqid(mt_rand(), true) . $sslStr;
        $entropy .= implode('', @fstat(fopen( __FILE__, 'r')));
        $entropy .= memory_get_usage();
        $sslStr = '';
        if ($urandom)
        {
            stream_set_read_buffer($handle, 0);
            $entropy .= @fread($handle, $bytes);
        }
        else
        {
 
            $samples = 3;
            $duration = 0;
            for ($pass = 0; $pass < $samples; ++$pass)
            {
                $microStart = microtime(true) * 1000000;
                $hash = sha1(mt_rand(), true);
                for ($count = 0; $count < 50; ++$count)
                {
                    $hash = sha1($hash, true);
                }
                $microEnd = microtime(true) * 1000000;
                $entropy .= $microStart . $microEnd;
                if ($microStart > $microEnd) {
                    $microEnd += 1000000;
                }
                $duration += $microEnd - $microStart;
            }
            $duration = $duration / $samples;
            $rounds = (int)(($maxTimeMicro / $duration) * 50);
            $iter = $bytes * (int) ceil(8 / $bitsPerRound);
            for ($pass = 0; $pass < $iter; ++$pass)
            {
                $microStart = microtime(true);
                $hash = sha1(mt_rand(), true);
                for ($count = 0; $count < $rounds; ++$count)
                {
                    $hash = sha1($hash, true);
                }
                $entropy .= $microStart . microtime(true);
            }
        }
 
        $randomStr .= sha1($entropy, true);
    }
 
    if ($urandom)
    {
        @fclose($handle);
    }
 
    return substr($randomStr, 0, $length);
}
function genRandomPassword($length = 8)
{
    $salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $base = strlen($salt);
    $makepass = '';
 
    $random = SnCrypt::genRandomBytes($length + 1);
    $shift = ord($random[0]);
    for ($i = 1; $i <= $length; ++$i)
    {
        $makepass .= $salt[($shift + ord($random[$i])) % $base];
        $shift += ord($random[$i]);
    }
 
    return $makepass;
}
function getCryptedPassword($plaintext, $salt = '')
{
    $encrypted = ($salt) ? md5($plaintext . $salt) : md5($plaintext);
    return $encrypted;
}
 
// write here your password:
$pw = "jelszooooo";
 
// we echo it:
$salt = genRandomPassword(32);
$crypt = getCryptedPassword($pw, $salt);
echo $crypt . ':' . $salt;
?>

Comments