#include #include #include #include #include #include #include #include #include "genSha1.h" #include "Ttiming.h" using namespace std; #define lexSize 64 //rozmiar słownika musi być potęgą liczby 2!!!! #define maxStrSize 10 //maskymalny rozmiar szukanego hasła, nie moze być wiekszy niz 10!! #define minStrSize 2 //minimalny rozmiar szukanego hasła od 1 do maxStrSize #define offset 6 //ile bitów potrzeba do zapisania liczby lexSize-1 np lexSize=4 to wtedy offset = 2; #define mask 0x3f //np dla maxKomb zapisanego na 64bitach to jest 58 zer i 6 (czyli offset) jedynek: 0000000 0000000 0000000 0000000 0000000 0000000 0000000 00111111 //"słownik" char lex[lexSize] = {'a','b','c','d','e','f','g','h', 'i','j','k','l','m','n','o','p', 'r','s','t','u','v','w','x','y', 'z','A','B','C','D','E','F','G', 'H','I','J','K','L','M','N','O', 'P','R','S','T','U','V','W','X', 'Y','Z','0','1','2','3','4','5', '6','7','8','9','_',' ','-','!',}; int main(int argc, char** argv) { if(argc <2){ cerr << "Usage: " << argv[0] << " " << endl; exit(1); } MPI_Init(NULL, NULL); int size,rank,strSize; short success = 1,sumSuccess = 1; TTiming czasomierzacz; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); uint64_t i; //licznik, 64 bit-owy bo maxStrSize * offset = 10 * 6 = 60 bit; 4 bity w "zapasie" :-) uint64_t maxKomb; //maxKomb to maksymalna ilosć kombinacji hasła = lexSize ^ strSize; char *str, *result; result = new char[41]; str = new char[maxStrSize]; if (!rank) czasomierzacz.Begin(); success = 0; maxKomb = pow(lexSize,minStrSize-1); for(strSize = minStrSize;strSize<=maxStrSize;strSize++){ //petla generujaca jaka ma być długość hasła z którego bedzie generowany hash maxKomb *= lexSize; i = rank; while(i> (offset*j)) & mask]; } sha1((unsigned char*)str,strSize,result); //obliczanie hash z wygenerowanego wcześniej hasła if(strcasecmp(argv[1],result) == 0){ //znalazłem odpowiedz 109 success = 1; //ustwaiem zmienna success na 0 cout<