Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где узкое место, код в теме 
:(
    Опции темы
K0r0l
Дата 12.11.2004, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



Код

while (dictfile) {

        // 1    
dictfile >> pair.pass_c;
       // =
   
       // 2
for (i = 0; i < len; i++) {
   
             // 3      
             // crypt with md5 PAIR.PASS_C
    md5_starts( &ctx );
             md5_update( &ctx, (uint8 *) pair.pass_c, (strlen(pair.pass_c)) );
             md5_finish( &ctx, md5sum );
             for( j = 0; j < 16; j++ ) {
        sprintf( output + j * 2, "%02x", md5sum[j] );
             }
             // ========================
            // =
            if( !memcmp( output, pair.hash_c[i], 32 ) ) {
     rf << pair.name_c[i] << ":" << pair.pass_c << "\n";
   }

        }
        // =
   
}


то есть как можно ускорить работу этого цикла?

поясню если кто не понял:
1) читаем из словаря строку
2) цикл пока не прочли все из словаря и внутри цикла действие № 3 - создание md5 хеша от прочитанной строки
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 12.11.2004, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



K0r0l
с первого взгляда, нужно ли в цикле все время вычислять strlen(pair.pass_c) ?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
K0r0l
Дата 12.11.2004, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



да, посколько мы его только что прочитали.. а длина паролей в словаре разная
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 12.11.2004, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



K0r0l
еще не совсем въехал, но читаешь в
Код
dictfile >> pair.pass_c;

так и вычисли
Код
strlen(pair.pass_c)
перед циклом
Код
for (i = 0; i < len; i++) {

вроде pair.pass_c в цикле №2 не меняется. или меняется?


Это сообщение отредактировал(а) bel_nikita - 12.11.2004, 22:20


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
K0r0l
Дата 14.11.2004, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



ты прав не меняется... но вот парадокс...
добавил такую строчку после dictfile >> pair.pass_c;

pass_len = strlen(pair.pass_c);


ну и внутри цикла подставляю эту переменную...



так прога вместо того чтобы выполняться быстее выполняется медленнее! смотри лог:

1) новая версия
real 0m4.665s
user 0m4.610s
sys 0m0.030s


2) старая версия
real 0m4.302s
user 0m4.300s
sys 0m0.000s


это средние значения после трех тестовых запусков.. ничего не понимаю ))

Это сообщение отредактировал(а) K0r0l - 14.11.2004, 01:51
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 14.11.2004, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



K0r0l
и ничего нигде больше не менял, кроме вычисления длины перед циклом?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
K0r0l
Дата 14.11.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



Код

while (dictfile) {
   
     dictfile >> pair.pass_c;
     pass_len = strlen(pair.pass_c);
     
     for (i = 0; i < len; i++) {
     
      // crypt with md5 PAIR.PASS_C
      md5_starts( &ctx );
                 md5_update( &ctx, (uint8 *) pair.pass_c, pass_len);
      md5_finish( &ctx, md5sum );
     
      for( j = 0; j < 16; j++ ) {
                  sprintf( output + j * 2, "%02x", md5sum[j] );
                 }
     
      // ==========================
     
      if( !memcmp( output, pair.hash_c[i], 32 ) ) {
       // result std (file or console)
       if (rf) {
        rf << pair.name_c[i] << ":" << pair.pass_c << "\n";
       } else {
        cout << pair.name_c[i] << ":" << pair.pass_c << "\n";
       }
       // ============================
      }
     
       
     }
   
   
    }



неа....
а может проверку совпадения хеша паролю как нить по-другому организовать...
сорри что достаю, но может есть еще какие-нить идеи...
PM MAIL WWW ICQ   Вверх
Mad
Дата 14.11.2004, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



K0r0l
Насколько я знаю, замедления работы зачастую вставляют прямо в MD5 функции (защита от подбора, чем дольше проверяется пароль тем меньше вероятность потбора, точнее надо больше времени на проверку всех вариантов).


Цитата(K0r0l @ 14.11.2004, 12:40)

for( j = 0; j < 16; j++ ) {
          sprintf( output + j << 1, "%02x", md5sum[j] );
    }

ненамного, но быстрей smile


--------------------
user posted image
PM MAIL   Вверх
K0r0l
Дата 19.11.2004, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



хм... компилятор одинаковый код выдал для двух этих конструкций ))
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 19.11.2004, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Не пользуйтесь стримами, а читайте из файла блоками функцией read.
Правда парсить блоки в цифры и строки самому придётся, но будет намного быстрее smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
K0r0l
Дата 19.11.2004, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



уже пробовал там все равно код получается громоздким.. нужно еще \0 отрезать от получаемой строки.. и пр геморой...

но все равно спасибо
PM MAIL WWW ICQ   Вверх
po-her
Дата 20.11.2004, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



Подскажите как это считается время выполнения цикла, программы, функции...? smile
PM MAIL   Вверх
sergejzr
Дата 20.11.2004, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



В Юниксах это smile
Запускаете свою программу, например"my.out", так:
time my.out

На экран выходит информация smile
Но это только общее время выполнения.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
po-her
Дата 21.11.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



А если я под windows программирую.. Тогда как?

PM MAIL   Вверх
chipset
Дата 21.11.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



GetProcessTimes работает только в NT


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0890 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.