Celem zadania jest uruchomienie równoległych obliczeń w wielu wątkach, w liczbie zgodnej z liczbą posiadanych przez komputer rdzeni. Tej liczby nie potrzeba wydobywać automatycznie z systemu - można ją podać programowi w czasie uruchamiania (program psrinfo na Solarisie i plik /proc/cpuinfo na Linuksie).

Obliczenia mają polegać na łamaniu haseł metodą słownikową. Lista haseł zaszyfrowanych funkcją MD5 jest dana poniżej, i program powinien próbować je po kolei łamać.

Algorytm łamania haseł oraz zrównoleglania obliczeń można zaczerpnąć z jakiegoś gotowego programu do łamania haseł. Natomiast cały program, w szczególności zarządzanie wątkami, uruchamianie i zatrzymywanie obliczeń, należy napisać samemu.

Po złamaniu danego hasła należy wyświetlić je na wyjściu, oraz obliczyć łączny czas CPU zużyty na obliczenia (funkcja times). Nakład czasu na łamanie jednego hasła powinien być limitowany przez program. Po osiągnięciu tego limitu dane hasło ma być porzucane i próbowane następne. Limit czasowy jest określany w sekundach czasu rzeczywistego (nie CPU) i powinien być zadawany jak argument wywołania programu (brak limitu oznacza brak limitu - czyli liczenie każdego hasła do skutku lub do wyczerpania wszystkich możliwości).

Słowniki, które można wykorzystać do łamania haseł:
http://security.stackexchange.com/questions/1376/where-can-i-find-good-dictionaries-for-dictionary-attacks

Serwisy, gdzie można znaleźć rzeczywiste hasła użytkowników „wycieknięte” z różnych systemów:
https://twitter.com/PastebinLeaks

Proszę jako zbiory testowe wykorzystać następujące:
http://pastebin.com/L6YbD136 plik lokalny: biclopsgames.txt.gz
http://pastebin.com/YUjExprE plik lokalny: poison.txt.gz

Do raportu z wykonania zadania proszę dołączyć wyniki łamania haseł z tych zbiorów.