|
|
|
| Ответ 009 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
пароль "cluster ", хэш "06b2d4b91b5c9eaa8c20a1c270f95b3c".
пароль "Linux ", хэш "e206a54e97690cce50cc872dd70ee896".
пароль "Lisbon ", хэш "fbfa6902f089e5a0fa2424bd460ecfd0".
пароль "pyramid ", хэш "437233c74e25fe505293cd2e8ecc2696".
пароль "subprogram ", хэш "fb28e9240e83a5264566de844cc45523".
Общее время - 0,9 секунды, celeron-2,26 ГГц, 256 ОЗУ, WinXPSP2, Denwer
<?php
$code=array(1 => "fb28e9240e83a5264566de844cc45523",
2 => "437233c74e25fe505293cd2e8ecc2696",
3 => "06b2d4b91b5c9eaa8c20a1c270f95b3c",
4 => "e206a54e97690cce50cc872dd70ee896",
5 => "fbfa6902f089e5a0fa2424bd460ecfd0");//Задан массив с хэшами.
$donecount=0; //Это - счетчик угаданных паролей. Пока что 0 ))
print "Began...<br />";
if (!file_exists('linux.words')) die('no dictionary file'); //паранойя
$dic=fopen('linux.words', 'r');
while($pas=fgets($dic)){ //и покуда файла еще осталось и ответов меньше пяти...
$upas=md5(strtolower(trim($pas))); //сказано же - нижний регистр!
for ($t=1; $t<=5; $t++){ //Чтоб не крутить пять раз цикл с подбором пароля,
//мы будем подбирать хэш к подобранному паролю,
//а не наоборот.
if($upas===$code[$t]){ //И, если мы угадали, то:
print "пароль "$pas", хэш "$code[$t]".<br />";//1)Пишем ответ,
$donecount++; //2)Запоминаем, что правильно угаданных
} //паролей стало на 1 больше.
}
}
fclose($dic);
print "Done!<br />";
//М. Голубев, aka DJ Paltus 16:30, 10.02.2006
?>
|
http://www.softtime.ru/info/task.php?id_article=75 | |
|
|
|
|
|
|
|
для: SoftTime
(10.02.2006 в 16:28)
| | Вот исходный вариант
<?php
$code=array(1 => "fb28e9240e83a5264566de844cc45523",
2 => "437233c74e25fe505293cd2e8ecc2696",
3 => "06b2d4b91b5c9eaa8c20a1c270f95b3c",
4 => "e206a54e97690cce50cc872dd70ee896",
5 => "fbfa6902f089e5a0fa2424bd460ecfd0");//Задан массив с хэшами.
$donecount=0; //Это - счетчик угаданных паролей. Пока что 0 ))
print "Began...<br />";
if (!file_exists('linux.words')) die('no dictionary file'); //паранойя
$dic=fopen('linux.words', 'r');
while($pas=fgets($dic)){ //и покуда файла еще осталось и ответов меньше пяти...
$upas=md5(strtolower(trim($pas))); //сказано же - нижний регистр!
for ($t=1; $t<=5; $t++){ //Чтоб не крутить пять раз цикл с подбором пароля,
//мы будем подбирать хэш к подобранному паролю,
//а не наоборот.
if($upas===$code[$t]){ //И, если мы угадали, то:
print "пароль \"$pas\", хэш \"$code[$t]\".<br />";//1)Пишем ответ,
$donecount++; //2)Запоминаем, что правильно угаданных
} //паролей стало на 1 больше.
}
}
fclose($dic);
print "Done!<br />";
//М. Голубев, aka DJ Paltus 16:30, 10.02.2006
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.02.2006 в 00:32)
| | Очень компактное решение, прекрасно читается, однако можно было использовать функцию file(), которая бы позволила ускорить вычисления, так как память можно не экономить при полумегабайтном словаре. | |
|
|
|
|
|
|
|
для: cheops
(13.02.2006 в 00:34)
| | а я перед решением скачал файл словаря из FreeBSD с нашего рабочего сервера, так он весил почти 3 метра. Все под него написано было, а потом я обратил внимание на то, что ваша база в 6 раз меньше, и забил ее. Кстати, в моем большом файле двух паролей не нашлось ) | |
|
|
|