2010-09-29 2 views
3

Друг дал мне вызов: он зашифровал строку, используя функцию склепа PHP (CRYPT_STD_DES) (из PHP4). Я знаю соль, используемую для шифрования, и поскольку крипт является односторонним алгоритмом, я должен использовать метод грубой силы, и я знаю, что пароли состоят только из строчных букв.Задача криптографии PHP

Теперь у меня есть машина с 16 ядрами (2x Xeon) и много оперативной памяти. Что является наиболее эффективным способом реализации этой силы атаки (я предполагаю, что я должен буду использовать PHP, который не вполне нормально, но если любой из вас есть идеи ...)

[EDIT]

и я забыл упомянуть, зашифрованная representaction является 13chars длина, и строка меньше, чем 8 букв, так же, как простой пароль шифрования :)

+0

Перед тем, как начать google для строки, хороший шанс, что она была расшифрована раньше: –

+1

Это «шоколад». Но если серьезно, если это соленое, я не думаю, что для него это принесет хорошие результаты. –

ответ

2

Это краткий пример C кода (скомпилирован с gcc -O2 -lcrypt)
на Ubuntu 10.04.1

#define _XOPEN_SOURCE 
    #include <unistd.h> 
    #include <stdio.h> 
    #include <stdlib.h> 

    void inc(char *p) 
    { 
    int i; 
    for (i=0 ; i<8 && p[i]=='z' ; i++); 
    if (i >= 8) exit(printf("Not found :-(\n")); 
    if (!p[i]) p[i]='a'; 
    else p[i]++; 
    while (--i >= 0) p[i]='a'; 
    } 

    int main() 
    { 
    char *salt = "XY"; 
    char *buzz = "XYaAbBcCZ0123"; 

    char pass[] = { 'a',0,0,0,0,0,0,0,0 }; 

    while(1) 
     if (! strcmp(crypt(pass, salt), buzz)) 
     exit(printf("Found %s :-)\n", pass)); 
     else 
     inc(pass); 
    } 

Этот код должен работать в течение двух дней (2.10^11 комбинаций) на ныне ПК, вы можете запустить его на нескольких машинах, один делает из «а» до «gzzzzzzz», другой от «haaaaaaa» до «nzzzzzzz» и т. д. ... например.

+0

Я добавил несколько быстрых потоков для этого, чтобы использовать 16 доступных ядер, и это сделало трюк в 3h, thx :) – canni

+0

Итак, какой пароль! –

+0

пароль был: allegro :) (название польского эквивалента ebay) – canni

2

Из PHP инструкции:

склепа() будет RET urn хешированная строка, используя стандартный Unix DES-алгоритм или альтернативные алгоритмы , которые могут быть доступны в системе .

Некоторые операционные системы поддерживают более , чем один тип хэша. Фактически, иногда стандартный алгоритм на основе DES заменяется алгоритмом на основе MD5. Тип хеша запускается аргументом соли. До 5.3, PHP определял бы доступные алгоритмы во время установки на основе системного crypt(). Если соль не при условии, PHP будет автоматически генерировать либо стандартный два символа (DES) соль, или двенадцать символов (MD5), в зависимости от наличия MD5

Другими словами, Функция crypt() просто вызывает функцию crypt() операционной системы из библиотеки C. Это означает две вещи.

Во-первых, тип шифрования стандартизован. Вам не нужно использовать PHP для запуска грубой силы, вам просто нужно знать используемый алгоритм. Многие программы, такие как Cane и Abel или Jack the Ripper, могут разбивать несколько алгоритмов с помощью грубой силы, словаря или атаку радужных таблиц.

Во-вторых, тип шифрования основан на операционной системе, на которой был зашифрован. Это означает, что вам, возможно, придется попробовать несколько разных методов шифрования, если не будет очевидного определения того, что было использовано (шаблон зашифрованной строки может вам что-то уговорить).

Я бы определенно НЕ предлагал попробовать использовать PHP для перебора, поскольку интерпретируемые языки работают намного медленнее, чем их скомпилированные копии.

1

Наиболее эффективным (хотя, вероятно, наименее опасным) способом является, вероятно, поиск того, кто его уже реализовал (например, John the Ripper).

Смежные вопросы