CalculateStrenght(); //print_r("
");
//print_r($aaa);
//print_r("
"); class classPasswordMeter{ public $password; public $brojpokusaja = 60000000; //Bruteforce attack 10.000.000 attacks in minute public function __construct($password) { $this->password = $password; $this->passLenght = strlen($this->password); } private function firstLetter_pairs_Entropy(){ $podeljenoNAslova = str_split($this->password); $entropy = 0; for($i = 0; $i < count($podeljenoNAslova)-1; $i++){ preg_match('/[A-Z]/', $podeljenoNAslova[$i], $matchLettersUpper); preg_match('/[a-z]/', $podeljenoNAslova[$i], $matchLettersLower); preg_match('/[0-9]/', $podeljenoNAslova[$i], $matchNumbers); preg_match('/[^A-Za-z0-9]/', $podeljenoNAslova[$i], $matchSpec); preg_match('/[A-Z]/', $podeljenoNAslova[$i+1], $matchLettersUpper1); preg_match('/[a-z]/', $podeljenoNAslova[$i+1], $matchLettersLower1); preg_match('/[0-9]/', $podeljenoNAslova[$i+1], $matchNumbers1); preg_match('/[^A-Za-z0-9]/', $podeljenoNAslova[$i+1], $matchSpec1); if(!empty($matchLettersUpper[0]) && !empty($matchLettersUpper1[0])){ if($matchLettersUpper[0] !== $matchLettersUpper1[0]){ $entropy += 4.7; }else{ $entropy += 0; } }elseif(!empty($matchLettersUpper[0]) && !empty($matchLettersLower1[0])){ $UpperTOlower = strtolower($matchLettersUpper[0]); if($matchLettersLower1[0] !== $UpperTOlower){ $entropy += 5.7; }else{ $entropy += 2.35; } }elseif(!empty($matchLettersUpper[0]) && !empty($matchNumbers1[0])){ $entropy += 5.17; }elseif(!empty($matchLettersUpper[0]) && !empty($matchSpec1[0])){ $entropy = 5.86; }elseif(!empty($matchLettersLower[0]) && !empty($matchLettersLower1[0])){ if($matchLettersLower[0] !== $matchLettersLower1[0]){ $entropy += 5.7; }else{ $entropy += 0; } }elseif(!empty($matchLettersLower[0]) && !empty($matchLettersUpper1[0])){ $UpperTOlower = strtolower($matchLettersUpper1[0]); if($matchLettersLower[0] !== $UpperTOlower){ $entropy += 5.7; }else{ $entropy += 2.35; } }elseif(!empty($matchLettersLower[0]) && !empty($matchNumbers1[0])){ $entropy += 5.17; }elseif(!empty($matchLettersLower[0]) && !empty($matchSpec1[0])){ $entropy += 5.86; }elseif(!empty($matchNumbers[0]) && !empty($matchNumbers1[0])){ if($matchNumbers[0] !== $matchNumbers1[0]){ $entropy += 3.32; }else{ $entropy += 0; } }elseif(!empty($matchNumbers[0]) && !empty($matchSpec1[0])){ $entropy += 5.39; }elseif(!empty($matchNumbers[0]) && !empty($matchLettersUpper1[0]) || !empty($matchNumbers[0]) && !empty($matchLettersLower1[0]) ){ $entropy += 5.17; }elseif(!empty($matchSpec[0]) && !empty($matchSpec1[0])){ if($matchSpec[0] !== $matchSpec1[0]){ $entropy += 5; }else{ $entropy += 0; } }elseif(!empty($matchSpec[0]) && !empty($matchNumbers1[0])){ $entropy += 5.39; }elseif((!empty($matchSpec[0]) && !empty($matchLettersUpper1[0])) || (!empty($matchSpec[0]) && !empty($matchLettersLower1[0]) ) ){ $entropy += 5.36; } } return round($entropy, 2); } private function ChrRepeat(){ $repeatLetter = 0; $charRepeat = count_chars($this->password ,1); $chIDandCount = array(); foreach($charRepeat as $key=>$val){ $chIDandCount["".chr($key).""] = $val; if($val > 1){ $repeatLetter += ($val-1); } } return array('noRepeatLettersArray'=>$chIDandCount, 'RepeatLettersPoints'=>$repeatLetter); } private function ChrExist(){ $chIDandCount= $this->ChrRepeat(); $NoRepeatChar = implode("", array_keys($chIDandCount['noRepeatLettersArray'])); //******************************************************************* preg_match_all('/[A-Z]/', $NoRepeatChar, $UpperL); preg_match_all('/[a-z]/', $NoRepeatChar, $LowerL); preg_match_all('/[0-9]/', $NoRepeatChar, $numbersL); preg_match_all('/[^a-zA-Z0-9]/', $NoRepeatChar, $specL); $strengthUpper = count($UpperL[0]); $strengthLower = count($LowerL[0]); $strengthNumbers = count($numbersL[0]); $strengthSpec = count($specL[0]); //******************************************************************* if($strengthUpper > 0 && $strengthLower > 0 && $strengthNumbers > 0 && $strengthSpec> 0 ){ $singleUpper = $singleLower = $singleNumbers = $singleSpec = 6.55; $chNum = 94; }elseif($strengthUpper > 0 && $strengthLower > 0 && $strengthNumbers > 0 && $strengthSpec == 0 ){ $singleUpper = $singleLower = $singleNumbers = 5.95; $chNum = 62; }elseif($strengthUpper == 0 && $strengthLower > 0 && $strengthNumbers > 0 && $strengthSpec > 0 ){ $singleLower = $singleNumbers = $singleSpec = 6.08; $chNum = 68; }elseif($strengthUpper > 0 && $strengthNumbers > 0 && $strengthSpec > 0 && $strengthLower == 0){ $singleUpper = $singleNumbers = $singleSpec = 6.08; $chNum = 68; }elseif($strengthUpper > 0 && $strengthLower > 0 && $strengthNumbers == 0 && $strengthSpec > 0 ){ $singleUpper = $singleLower = $singleSpec = 6.4; $chNum = 84; }elseif($strengthUpper > 0 && $strengthLower > 0 && $strengthNumbers == 0 && $strengthSpec == 0 ){ $singleUpper = $singleLower = 5.7; $chNum = 52; }elseif($strengthUpper > 0 && $strengthLower == 0 && $strengthNumbers > 0 && $strengthSpec == 0 ){ $singleUpper = $singleNumbers = 5.17; $chNum = 36; }elseif($strengthUpper > 0 && $strengthLower == 0 && $strengthNumbers == 0 && $strengthSpec > 0 ){ $singleUpper = $singleSpec = 5.86; $chNum = 58; }elseif($strengthUpper == 0 && $strengthLower > 0 && $strengthNumbers > 0 && $strengthSpec == 0 ){ $singleLower = $singleNumbers = 5.17; $chNum = 36; }elseif($strengthUpper == 0 && $strengthLower > 0 && $strengthNumbers == 0 && $strengthSpec > 0 ){ $singleLower = $singleSpec = 5.86; $chNum = 58; }elseif($strengthUpper == 0 && $strengthLower == 0 && $strengthNumbers > 0 && $strengthSpec > 0 ){ $singleNumbers = $singleSpec = 5.39; $chNum = 42; }elseif($strengthUpper == 0 && $strengthLower > 0 && $strengthNumbers == 0 && $strengthSpec == 0 ){ $singleLower = 4.7; $chNum = 26; }elseif($strengthUpper > 0 && $strengthLower == 0 && $strengthNumbers == 0 && $strengthSpec == 0 ){ $singleUpper = 4.7; $chNum = 26; }elseif($strengthUpper == 0 && $strengthLower == 0 && $strengthNumbers > 0 && $strengthSpec == 0 ){ $singleNumbers = 3.22; $chNum = 10; }elseif($strengthUpper == 0 && $strengthLower == 0 && $strengthNumbers == 0 && $strengthSpec > 0 ){ $singleSpec = 5; $chNum = 32; } //******************************************************************* if($strengthUpper == 0){ $passScoreUpper = 0 ; $passpointsUpper = -50 ; }elseif($strengthUpper == 1 && !array_sum($chIDandCount['noRepeatLettersArray']) == $this->passLenght ){ $passpointsUpper = $passScoreUpper = $singleUpper ; }else{ $passpointsUpper = $passScoreUpper = $singleUpper * $strengthUpper; } //**************** if($strengthLower == 0){ $passScoreLower = 0; $passpointsLower = -50; }elseif($strengthLower == 1 && !array_sum($chIDandCount['noRepeatLettersArray']) == $this->passLenght ){ $passpointsLower = $passScoreLower = $singleLower; }else{ $passpointsLower = $passScoreLower = $singleLower * $strengthLower ; } //**************** if($strengthNumbers == 0){ $passScoreNumbers = 0; $passpointsNumbers = -50; }elseif($strengthNumbers == 1 && !array_sum($chIDandCount['noRepeatLettersArray']) == $this->passLenght ){ $passpointsNumbers = $passScoreNumbers = $singleNumbers; }else{ $passpointsNumbers = $passScoreNumbers = $singleNumbers * $strengthNumbers ; } //**************** if($strengthSpec == 0){ $passScoreSpec = 0 ; $passpointsSpec = -50; }elseif($strengthSpec == 1 && !array_sum($chIDandCount['noRepeatLettersArray']) == $this->passLenght ){ $passpointsSpec = $passScoreSpec = $singleSpec; }else{ $passpointsSpec = $passScoreSpec = $singleSpec * $strengthSpec ; } //============================================================================================== $ukupnoPoena = $passScoreUpper + $passScoreLower + $passScoreNumbers + $passScoreSpec; $ukupnoPoena1 = $passpointsUpper + $passpointsLower + $passpointsNumbers + $passpointsSpec; return array("usedChr"=>$chNum, "poitsSum"=>$ukupnoPoena1, "entropySum"=>$ukupnoPoena); } private function passLenght(){ if($this->passLenght < 5){ $passScore = 5; }elseif($this->passLenght < 5){ $passScore = 10; }elseif($this->passLenght < 7){ $passScore = 15; }elseif($this->passLenght < 9){ $passScore = 20; }elseif($this->passLenght < 11){ $passScore = 25; }elseif($this->passLenght < 15){ $passScore = 30; }else{ $passScore = 50; } return $passScore; } private function convertTime($time){ $total_time=$time; //****************************** $check_years = floor($total_time/(365*24*60*60)); if($check_years !== 0){ $years = $check_years; $total_time = floor($total_time%(365*24*60*60)); } //****************************** $check_months = floor($total_time/(30*24*60*60)); if($check_months !== 0){ $months = $check_months; $total_time = floor($total_time%(30*24*60*60)); } //****************************** $check_days = floor($total_time/(24*60*60)); if($check_days !== 0){ $days = $check_days; $total_time = floor($total_time%(24*60*60)); } //****************************** $check_hours = floor($total_time/(60*60)); if($check_hours !== 0){ $hours = $check_hours; $total_time = floor($total_time%(60*60)); } //****************************** $check_minutes = floor($total_time/60); if($check_minutes !== 0){ $minutes = $check_minutes; $seconds = floor($total_time%60); } //****************************** return array("years"=>$years, "months"=>$months, "days"=>$days, "hours"=>$hours, "minutes"=>$minutes, "seconds"=>$seconds); } private function calculateBreakTime($dd){ if($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] == 0 && $dd['hours'] == 0){ $poeni = 1; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] == 0 && $dd['hours'] < 3){ $poeni = 2; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] == 0 && $dd['hours'] < 6 && $dd['hours'] >= 3){ $poeni = 3; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] == 0 && $dd['hours'] < 12 && $dd['hours'] >= 6){ $poeni = 4; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] == 0 && $dd['hours'] < 24 && $dd['hours'] >=12 ){ $poeni = 5; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] < 2 ){ $poeni = 6; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] < 8 && $dd['days'] >= 2 ){ $poeni = 7; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] < 15 && $dd['days'] >= 8){ $poeni = 8; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] < 22 && $dd['days'] >= 15){ $poeni = 9; }elseif($dd['years'] == 0 && $dd['months'] == 0 && $dd['days'] < 30 && $dd['days'] >= 22){ $poeni = 10; }elseif($dd['years'] == 0 && $dd['months'] > 2 ){ $poeni = 15; }elseif($dd['years'] == 0 && $dd['months'] >= 2 && $dd['months'] < 3){ $poeni = 20; }elseif($dd['years'] == 0 && $dd['months'] >= 3 && $dd['months'] < 5){ $rezultat = "strong level 2"; $poeni = 25; }elseif($dd['years'] == 0 && $dd['months'] >= 5 && $dd['months'] < 8){ $poeni = 30; }elseif($dd['years'] == 0 && $dd['months'] >= 8 && $dd['months'] < 12){ $poeni = 50; }elseif($dd['years'] < 2 && $dd['years'] > 0){ $poeni = 60; }elseif($dd['years'] >=2 && $dd['years'] < 4){ $poeni = 70; }elseif($dd['years'] >= 4 && $dd['years'] < 9){ $poeni = 80; }elseif($dd['years'] >= 9 && $dd['years'] < 30){ $poeni = 90; }elseif($dd['years'] > 30 ){ $poeni = 100; } return $poeni; } public function CalculateStrenght(){ $charTOarry = $this->ChrRepeat(); $chrex = $this->ChrExist(); $SumEntropy= $chrex['entropySum']; $SumPoints = $chrex['poitsSum']; $passLen = $this->passLenght(); //======================= $brojkomb =pow($chrex['usedChr'], $this->passLenght); $vreme = $brojkomb/$this->brojpokusaja; $breakTime = $this->convertTime($vreme); $timeBreakPoints = $this->calculateBreakTime($breakTime); //********************ENTROPIJA************************************* $PairsAfirst = $this->firstLetter_pairs_Entropy(); $passEntropyFull = round($this->passLenght*( log($chrex['usedChr']) /log(2) ), 2); $passEntropyALLCHAR = round($this->passLenght*( log(94) /log(2) ), 2); $sumEntropy = ($SumEntropy + $passEntropyFull + $PairsAfirst + $passEntropyALLCHAR)/4; if($sumEntropy < 28){ $entropyPoints = 10; }elseif($sumEntropy > 28 || $sumEntropy < 35){ $entropyPoints = 20; }elseif($sumEntropy > 36 || $sumEntropy < 59){ $entropyPoints = 50; }elseif($sumEntropy > 60 || $sumEntropy < 127){ $entropyPoints = 100; }elseif($sumEntropy > 128 ){ $entropyPoints = 150; } $repeatNegative = $charTOarry['RepeatLettersPoints'] * -5; //********************ENTROPIJA************************************* $final = ((($timeBreakPoints + $SumPoints + $PairsAfirst + $passLen + $repeatNegative)/5 ) + $entropyPoints)/2; if($final < 20){ $strong = 'weak'; }elseif($final >= 20 && $final < 30){ $strong = 'medium'; }elseif($final >= 30 && $final <= 35){ $strong = 'strong'; }elseif($final > 35){ $strong = 'extra strong'; } $graph = round($final * 2.85); return $graph; } } ?>