Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 003 на задачу N 5
 
 автор: SoftTime   (09.02.2006 в 15:57)   письмо автору
 
 

Ответ 003 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.

<?
######### Решение задачи номер: 5 ###############
######### Студент: DDK ##########################

// Собираем массив с md5-хешами
$required[] = "fb28e9240e83a5264566de844cc45523";
$required[] = "437233c74e25fe505293cd2e8ecc2696";
$required[] = "06b2d4b91b5c9eaa8c20a1c270f95b3c";
$required[] = "e206a54e97690cce50cc872dd70ee896";
$required[] = "fbfa6902f089e5a0fa2424bd460ecfd0";

$basefile "linux.words"// Указываем имя файла с базой слов

$starttime getmicrotime();
$words file($basefile);
$words str_replace("
"
""$words); // Чистим массив от esc-последовательностей (linux only)
$words[] = ""// На тот случай, если пароль empty, так сказать.
foreach($words as $thisword) {
    for(
$i=0;$i<count($required);$i++) {
        if(
md5($thisword) == $required[$i])    {
            
$result[$i] = """.$thisword.""";
        } elseif(
md5(strtolower($thisword)) == $required[$i])    {
            
$result[$i] = """.strtolower($thisword)."" (оригинал: "".$thisword."")";
        }
    }
    if(isset(
$result) AND count($result) == count($required)) {break;}
}
$worktime getmicrotime() - $starttime;
foreach(
$required as $i => $hash) {
    if(isset(
$result[$i])) {
        echo 
$required[$i]." => <b>".$result[$i]."</b><br>";
    } else {
        echo 
$required[$i]." => <b><font color='Red'>Не расшифровано</font></b><br>";
    }
}
echo 
"<br>Скрипт выполнен за: <b>".$worktime."</b> сек.";
// Эту функцию свиснул из чьего-то ответа на 4-ю задачу, да простит меня автор :)
function getmicrotime() { 
    list(
$usec$sec) = explode(' 'microtime()); 
    return ((float)
$usec+(float)$sec); 
}
?>


Результат:


fb28e9240e83a5264566de844cc45523 => "subprogram"
437233c74e25fe505293cd2e8ecc2696 => "pyramid"
06b2d4b91b5c9eaa8c20a1c270f95b3c => "cluster"
e206a54e97690cce50cc872dd70ee896 => "linux" (оригинал: "Linux")
fbfa6902f089e5a0fa2424bd460ecfd0 => "lisbon" (оригинал: "Lisbon")

Скрипт выполнен за: 4.20715522766 сек.


http://www.softtime.ru/info/task.php?id_article=75

   
 
 автор: cheops   (12.02.2006 в 23:54)   письмо автору
 
   для: SoftTime   (09.02.2006 в 15:57)
 

Ориентироваться нужно на
<?
######### Решение задачи номер: 5 ###############
######### Студент: DDK ##########################

// Собираем массив с md5-хешами
$required[] = "fb28e9240e83a5264566de844cc45523";
$required[] = "437233c74e25fe505293cd2e8ecc2696";
$required[] = "06b2d4b91b5c9eaa8c20a1c270f95b3c";
$required[] = "e206a54e97690cce50cc872dd70ee896";
$required[] = "fbfa6902f089e5a0fa2424bd460ecfd0";

$basefile "linux.words"// Указываем имя файла с базой слов

$starttime getmicrotime();
$words file($basefile);
$words str_replace("\n"""$words); // Чистим массив от esc-последовательностей (linux only)
$words[] = ""// На тот случай, если пароль empty, так сказать.
foreach($words as $thisword) {
    for(
$i=0;$i<count($required);$i++) {
        if(
md5($thisword) == $required[$i]) {
            
$result[$i] = "\"".$thisword."\"";
        } elseif(
md5(strtolower($thisword)) == $required[$i])   {
            
$result[$i] = "\"".strtolower($thisword)."\" (оригинал: \"".$thisword."\")";
        }
    }
    if(isset(
$result) AND count($result) == count($required)) {break;}
}
$worktime getmicrotime() - $starttime;
foreach(
$required as $i => $hash) {
    if(isset(
$result[$i])) {
        echo 
$required[$i]." => <b>".$result[$i]."</b><br>";
    } else {
        echo 
$required[$i]." => <b><font color='Red'>Не расшифровано</font></b><br>";
    }
}
echo 
"<br>Скрипт выполнен за: <b>".$worktime."</b> сек.";
// Эту функцию свиснул из чьего-то ответа на 4-ю задачу, да простит меня автор :)
function getmicrotime() { 
    list(
$usec$sec) = explode(' 'microtime()); 
    return ((float)
$usec+(float)$sec); 
}
?>

Не могу избавится от уничтожения кавычек - какой-то хитрый режим на сервер включён, на локальной машине всё нормально - тут пропадают слеши.

   
 
 автор: cheops   (12.02.2006 в 23:58)   письмо автору
 
   для: cheops   (12.02.2006 в 23:54)
 

Не сказал бы, что код очень читабельный и что из него выжили всё что можно... Вот смотрите
<?php
foreach($words as $thisword) { 
    for(
$i=0;$i<count($required);$i++) {
?>

У вас каждый раз вычисляется функция count($required), по числу слов в словаре, а потом ещё для каждого слова 5 раз вычисляется md5($thisword), хотя функция достаточно ресурсоёмкая и даже когда пароль вычислен - он продолжает вычисляться при других проходах.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования