59 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App;
 | 
						|
 | 
						|
class Entropy
 | 
						|
{
 | 
						|
    public static function CharPoolSize($password)
 | 
						|
    {
 | 
						|
        $n_options = 0;
 | 
						|
        if(preg_match("/[0-9]+/",$password)) // check numbers
 | 
						|
            $n_options += 10;
 | 
						|
        if(preg_match("/[a-z]+/",$password)) // check lowercase
 | 
						|
            $n_options += 26;
 | 
						|
        if(preg_match("/[A-Z]+/",$password)) // check
 | 
						|
            $n_options += 26;
 | 
						|
        if(preg_match("/[\W_ ]+/",$password)) // check specialchars
 | 
						|
            $n_options += 32;
 | 
						|
        return $n_options;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function CountUniqueChars($str)
 | 
						|
    {
 | 
						|
        $characters = array();
 | 
						|
        $count = 0;
 | 
						|
        $length= strlen($str);
 | 
						|
 | 
						|
        //loop, figure it out
 | 
						|
        for($x = 0; $x < $length; $x++)
 | 
						|
        {
 | 
						|
            $c = $str[$x];
 | 
						|
            if(!in_array($c,$characters))
 | 
						|
            {
 | 
						|
                $characters[] = $c;
 | 
						|
                $count += 1;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return $count;
 | 
						|
    }
 | 
						|
    public static function Calculate($password,$base=false)
 | 
						|
    {
 | 
						|
        // first we check which sets of characters are available in the password
 | 
						|
        if($base === false || !is_numeric($base))
 | 
						|
            $base = static::CharPoolSize($password);
 | 
						|
 | 
						|
        return static::CalculateEntropy(strlen($password),$base);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function CalculateEntropy($length,$poolsize)
 | 
						|
    {
 | 
						|
        if($poolsize == 1)
 | 
						|
            return log($length,2);
 | 
						|
        else
 | 
						|
            return $length * log($poolsize,2);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 |