|
|
|
| Ответ 007 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
<!-- Axxil-->
<?php
$file=file('linux.words');
$hash[0]='fb28e9240e83a5264566de844cc45523';
$hash[1]='437233c74e25fe505293cd2e8ecc2696';
$hash[2]='06b2d4b91b5c9eaa8c20a1c270f95b3c';
$hash[3]='e206a54e97690cce50cc872dd70ee896';
$hash[4]='fbfa6902f089e5a0fa2424bd460ecfd0';
$count=0;
foreach($file as $word){
if(in_array(md5(trim(strtolower($word))),$hash)){
echo $word."<br>";
$count++;
}
if($count==5) break;
}
?>
|
http://www.softtime.ru/info/task.php?id_article=75 | |
|
|
|
|
|
|
|
для: SoftTime
(10.02.2006 в 10:30)
| | прикольно, а главное быстро
я и не догался бы поместить файл в массив и функция in_array хорошо использована
по моему этот код луший | |
|
|
|
|
|
|
|
для: SoftTime
(10.02.2006 в 10:30)
| | Просто суперское решение, читабельное, компактное, досрочный выход при нахождении всех паролей, хэш вычисляется только один раз. Скорость выше всяких похвал - мне это решение больше всех понравилось. | |
|
|
|
|
|
|
|
для: cheops
(13.02.2006 в 00:43)
| | а если слов станет 6, надо менять в двух местах ;-)
и неизвестно какой хеш какому слову принадлежит | |
|
|
|
|
|
|
|
для: cheops
(13.02.2006 в 00:43)
| | А у меня большая претензия к этому варианту: какой пароль относится к какому хэшу?
А если хешей будет не 5, а 20... как тогда разбираться?
Ну и я считаю что результаты скрипта должны быть доступны для дальнейшей работы (вывод на экран я таковым не считаю). Но это уже мой личный бзик:) | |
|
|
|
|
|
|
|
для: Loki
(13.02.2006 в 10:30)
| | Я делал через array_searc, загонял словарь в хэш-массив и искал в нем хэш-пароль. | |
|
|
|
|
|
|
|
для: Loki
(13.02.2006 в 10:30)
| | Да нассчёт кому какой хеш принадлежит серьёзный косяк...
Не заметил блин...
А насчёт вывода... Срмневаюсь что в этой же программе понадобится работать с паролями. Но если надо это делается двумя взмахами пальцев :)
<?php
$file=file('linux.words');
$hash[0]='fb28e9240e83a5264566de844cc45523';
$hash[1]='437233c74e25fe505293cd2e8ecc2696';
$hash[2]='06b2d4b91b5c9eaa8c20a1c270f95b3c';
$hash[3]='e206a54e97690cce50cc872dd70ee896';
$hash[4]='fbfa6902f089e5a0fa2424bd460ecfd0';
$count=0;
$out=array();
foreach($file as $word){
if(in_array(md5(trim(strtolower($word))),$hash)){
array_push($out,array('pass'=>$word,'hash'=>md5(trim(strtolower($word)))));
$count++;
}
if($count==sizeof($hash)) break;
}
// И пожалуйста работаем с массивом
foreach($out as $key=>$item){
echo $key.". Hash: ".$item['hash']." Password: ".$item['pass']."<br>";
}
?>
|
Но в плане скорости конечно лучше не заносить результат в массив $out а сразу вываливать в браузер | |
|
|
|
|
|
|
|
для: Axxil
(13.02.2006 в 12:24)
| | Скрипт самый компактный, но imho не самый лучший. За читаемость я бы поставил ниже, а все в
"if(in_array(md5(trim(strtolower($word))),$hash)){" и подобных конструкциях. Мало того что подобный стиль трудно "прочитать", его еще и сложнее редактировать. Так что это читаемость никак не повышает, а снижает. | |
|
|
|
|
|
|
|
для: Artem S.
(13.02.2006 в 22:19)
| | Я ещё раз позволю себе выразить недоумение.
Мы пароли подбираем а не пишем сложнейшую CMS. И здесь важна скорость и память. Лишнии присваивания совсем не к чему.
В данном случае это конечно не смертельно, но надо уметь различать задачи и представлять когда некоторое уменьшение(замечу не смертельное) читабельности приносится в жертву скорости. | |
|
|
|
|
|
|
|
для: SoftTime
(10.02.2006 в 10:30)
| | Хе :). У меня такое же решение получилось. Только без if($count==5) break; и trim().
Ничего не смог подобрать, поэтому и не отправил. Так и не понял в чём дело, почему не работает. /* может из-за того, что file() возвращает строки, в которых, в конце, \n? */ | |
|
|
|