Недавно я наткнулся в инете на задачку подбора паролей. Будем считать, что мы забыли свой пароль,
который вытащили из файла .htpasswd и который зашифрован по алгоритму MD5. Допустим, что у нас был
коротенький пасс длиной от 1 до 4х символов латинского алфавита в нижнем регистре - значит нам придется перебрать
всего лишь 456976 комбинаций :)
<? function pass_md5 ($hash) { //вычисляем начальное время, чтобы узнать за скоко сек найден пасс $start_time = microtime(); $start_array = explode(" ",$start_time); $start_time = $start_array[1] + $start_array[0]; //определяем используемые нами символы - маленькие англ. буковки :) $alf = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); //подсчитаем скоко их (а то вдруг, придется еще какие-нибудь символы добавить) $acount = count ($alf); //пасс из одного символа for ($i=0; $i<$acount; $i++) { $str=$alf[$i]; if (md5($str) == $hash) { echo "Gotcha! pass is <font color=red>$str</font>"; $end_time = microtime(); $end_array = explode(" ",$end_time); $end_time = $end_array[1] + $end_array[0]; $time = $end_time - $start_time; echo " - Найдено за $time секунд!<br>"; return; } //пасс из двух символов for ($i=0; $i<$acount; $i++) for ($j=0; $j<$acount; $j++) { $str=$alf[$i].$alf[$j]; if (md5($str) == $hash) { echo "Gotcha! pass is <font color=red>$str</font>"; $end_time = microtime(); $end_array = explode(" ",$end_time); $end_time = $end_array[1] + $end_array[0]; $time = $end_time - $start_time; echo " - Найдено за $time секунд!<br>"; return; } } //пасс из трех символов for ($i=0; $i<$acount; $i++) for ($j=0; $j<$acount; $j++) for ($k=0; $k<$acount; $k++) { $str=$alf[$i].$alf[$j].$alf[$k]; if (md5($str) == $hash) { echo "Gotcha! pass is <font color=red>$str</font>"; $end_time = microtime(); $end_array = explode(" ",$end_time); $end_time = $end_array[1] + $end_array[0]; $time = $end_time - $start_time; echo " - Найдено за $time секунд!<br>"; return; } } //пасс из четырех символов for ($i=0; $i<$acount; $i++) for ($j=0; $j<$acount; $j++) for ($k=0; $k<$acount; $k++) for ($l=0; $l<$acount; $l++) { $str=$alf[$i].$alf[$j].$alf[$k].$alf[$l]; if (md5($str) == $hash) { echo "Gotcha! pass is <font color=red>$str</font>"; $end_time = microtime(); $end_array = explode(" ",$end_time); $end_time = $end_array[1] + $end_array[0]; $time = $end_time - $start_time; echo " - Найдено за $time секунд!<br>"; return; } } } }
pass_md5("e206a54e97690cce50cc872dd70ee896");
?>
Автор: Юферев Денис.
|