|
|
|
| Ответ 006 на задачу N 4.
С условиями задачи можно ознакомится по ссылке.
<?
// Собираем массив с md5-хешами
$required[] = "ee11cbb19052e40b07aac0ca060c23ee";
$required[] = "dd97813dd40be87559aaefed642c3fbb";
$required[] = "8dbc672497bdc46f88e864bb1121232c";
$required[] = "3e10f8c809242d3a0f94c18e7addb866";
// Этим циклом собираем в массив $symbols все английские буковки
for($i=97; $i < 123; $i++) {
$symbols[] = chr($i);
}
for($m=0; $m < count($required); $m++) {
// Цикл первый - отвечает за перебор первого символа.
for($i=0; $i < count($symbols); $i++) {
$pass[1] = $symbols[$i]; // Задаём первую буковку промежуточного результата.
$md5pass = md5($pass[1]); // Кодируем промежуточное значение в MD5.
if(isset($result[$m])) {break;} // Тормозим цикл, если результат найден, что бы не гонять машину попусту.
if($md5pass == $required[$m]) {$result[$m] = $pass[1];} // Проверяем на соответствие.
// Цикл второй - отвечает за перебор второго символа.
for($n=0; $n < count($symbols); $n++) {
$pass[2] = $pass[1].$symbols[$n]; // Присоединяем к промежуточному значению следующий символ.
$md5pass = md5($pass[2]); // Кодируем промежуточное значение в MD5.
if(isset($result[$m])) {break;} // Тормозим цикл, если результат найден, что бы не гонять машину попусту.
if($md5pass == $required[$m]) {$result[$m] = $pass[2];} // Проверяем на соответствие.
// Цикл третий - отвечает за перебор птретьего символа.
for($q=0; $q < count($symbols); $q++) {
$pass[3] = $pass[2].$symbols[$q]; // Присоединяем к промежуточному значению следующий символ.
$md5pass = md5($pass[3]); // Кодируем промежуточное значение в MD5.
if(isset($result[$m])) {break;} // Тормозим цикл, если результат найден, что бы не гонять машину попусту.
if($md5pass == $required[$m]) {$result[$m] = $pass[3];} // Проверяем на соответствие.
// Цикл четвёртый - отвечает за перебор четвёртого символа.
for($p=0; $p < count($symbols); $p++) {
$pass[4] = $pass[3].$symbols[$p]; // Присоединяем к промежуточному значению следующий символ.
$md5pass = md5($pass[4]); // Кодируем промежуточное значение в MD5.
if($md5pass == $required[$m]) {$result[$m] = $pass[4]; break;} // Проверяем на соответствие и тормозим цикл, если результат найден, что бы не гонять машину попусту.
}
}
}
}
echo ($m+1).") MD5-хеш: <b>".$required[$m]."</b> Расшифровка: <b>";
if(isset($result[$m])) {
echo $result[$m]."</b><br>";
} else {
echo "Не расшифровано</b><br>";
}
}
?>
|
Результат:
1) MD5-хеш: ee11cbb19052e40b07aac0ca060c23ee Расшифровка: user
2) MD5-хеш: dd97813dd40be87559aaefed642c3fbb Расшифровка: igor
3) MD5-хеш: 8dbc672497bdc46f88e864bb1121232c Расшифровка: lena
4) MD5-хеш: 3e10f8c809242d3a0f94c18e7addb866 Расшифровка: atom
http://www.softtime.ru/info/task.php?id_article=74 | |
|
|
|
|
|
|
|
для: SoftTime
(06.02.2006 в 21:27)
| | Не понравились вложенные циклы, но хорошо то, что пароли перебираются в куче. Очень хорошо, что символы вынесены в массив $symbols - можно легко расширить диапазон символов. | |
|
|
|
|
|
|
|
для: SoftTime
(06.02.2006 в 21:27)
| | С первого взгяда выглядит устрашающе. Но с задачей скрипт справляется. | |
|
|
|