From fb11ea373e37f80185f0b819be9f715a83a87a1a Mon Sep 17 00:00:00 2001 From: hk Date: Sat, 21 Jan 2017 18:06:00 +0100 Subject: [PATCH] Working fine. Time to optimization --- DergunPiotr-WaskoDominik/projekt/Ttiming.h | 40 +++++++++++++++++++ .../projekt/sha1breaker.cpp | 36 ++++++++++++----- 2 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 DergunPiotr-WaskoDominik/projekt/Ttiming.h diff --git a/DergunPiotr-WaskoDominik/projekt/Ttiming.h b/DergunPiotr-WaskoDominik/projekt/Ttiming.h new file mode 100644 index 0000000..93d6e19 --- /dev/null +++ b/DergunPiotr-WaskoDominik/projekt/Ttiming.h @@ -0,0 +1,40 @@ +#if !defined(DEF_TTIMING) +#define DEF_TTIMING +#include + +class TTiming +{ +protected: + struct timeval start; + struct timeval stop; + void getTime(timeval &tv); + +public: + TTiming(void); + + void Begin(void); + long End(void); +}; + +inline TTiming::TTiming(void) +{ + +} + +inline void TTiming::Begin(void) +{ + getTime(start); +} + +inline long TTiming::End(void) +{ + getTime(stop); + return ((stop.tv_sec-start.tv_sec) * 1000 + (stop.tv_usec-start.tv_usec)/1000.0) + 0.5; +} + +inline void TTiming::getTime(timeval &tv) +{ + gettimeofday(&tv,NULL); +} + +#endif diff --git a/DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp b/DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp index c910ef1..a873685 100644 --- a/DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp +++ b/DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp @@ -7,12 +7,13 @@ #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 3 //minimalny rozmiar szukanego hasła od 1 do maxStrSize +#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 @@ -30,6 +31,8 @@ char lex[lexSize] = {'a','b','c','d','e','f','g','h', + + int main(int argc, char** argv) { @@ -41,9 +44,12 @@ int main(int argc, char** argv) { 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; @@ -51,34 +57,42 @@ int main(int argc, char** argv) { result = new char[41]; str = new char[maxStrSize]; + if (!rank) czasomierzacz.Begin(); for(strSize = minStrSize;strSize<=maxStrSize;strSize++){ //petla generujaca jaka ma być długość hasła z którego bedzie generowany hash - maxKomb = pow(lexSize,strSize);//tak wiem że potega ale w całym programie wykona się maksymalnie tyle razy: ilość porcesów *(maxStrSize - minStrSize) + maxKomb = pow(lexSize,strSize);//tak, wiem że potega ale w całym programie wykona się maksymalnie tyle razy: ilość porcesów *(maxStrSize - minStrSize) i = rank; while(i> (offset*j)) & mask]; } - + sha1((unsigned char*)str,strSize,result); //obliczanie hash z wygenerowanego wcześniej hasła - if(memcmp(argv[1],result,41) == 0 ){ //prównuje hash obliczony z tym podanym jako argument programu - //znaleziono hasha!!! - cout<<"Znalazłem!!!"<