@ -54,12 +54,15 @@ int main(int argc, char** argv) {
str = new char [ maxStrSize ] ;
str = new char [ maxStrSize ] ;
if ( ! rank ) czasomierzacz . Begin ( ) ;
if ( ! rank ) czasomierzacz . Begin ( ) ;
success = 0 ;
maxKomb = pow ( lexSize , minStrSize - 1 ) ;
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
for ( strSize = minStrSize ; strSize < = maxStrSize ; strSize + + ) { //petla generujaca jaka ma być długość hasła z którego bedzie generowany hash
maxKomb * = lexSize ;
maxKomb * = lexSize ;
i = rank ;
i = rank ;
MPI_Allreduce ( & success , & sumSuccess , 1 , MPI : : SHORT , MPI : : SUM , MPI_COMM_WORLD ) ;
if ( sumSuccess > 0 ) break ;
while ( i < maxKomb ) { //generowanie różnych haseł
while ( i < maxKomb ) { //generowanie różnych haseł
for ( int j = 0 ; j < strSize ; j + + ) {
for ( int j = 0 ; j < strSize ; j + + ) {
str [ j ] = lex [ ( i > > ( offset * j ) ) & mask ] ;
str [ j ] = lex [ ( i > > ( offset * j ) ) & mask ] ;
@ -68,21 +71,20 @@ int main(int argc, char** argv) {
sha1 ( ( unsigned char * ) str , strSize , result ) ; //obliczanie hash z wygenerowanego wcześniej hasła
sha1 ( ( unsigned char * ) str , strSize , result ) ; //obliczanie hash z wygenerowanego wcześniej hasła
if ( strcasecmp ( argv [ 1 ] , result ) = = 0 ) { //znalazłem odpowiedz 109
if ( strcasecmp ( argv [ 1 ] , result ) = = 0 ) { //znalazłem odpowiedz 109
success = 0 ; //ustwaiem zmienna success na 0
success = 1 ;
cout < < endl < < " Złamałem hasha: " ;
cout < < endl < < " Złamałem hasha: " ;
for ( int l = 0 ; l < strSize ; l + + ) cout < < str [ l ] ;
for ( int l = 0 ; l < strSize ; l + + ) cout < < str [ l ] ;
cout < < endl ;
cout < < endl ;
}
}
MPI_Allreduce ( & success , & sumSuccess , 1 , MPI : : SHORT , MPI : : BAND , MPI_COMM_WORLD ) ; //robię bitowe AND na zmiennej 'success'. wyjdzie 0 gdy 'success' z któregokolwiek procesu jest równy 0
if ( ! sumSuccess ) goto stop ; //sumSuccess = 0 wiec ten proces się kończy.
//niech więcej nie liczy po tej pętli while skoro znalazł
if ( success > 0 )
break ;
i + = size ;
i + = size ;
}
}
}
}
stop :
if ( ! rank ) cout < < " Czas = " < < czasomierzacz . End ( ) < < " ms " < < endl < < endl ;
if ( ! rank ) cout < < " Czas = " < < czasomierzacz . End ( ) < < " ms " < < endl < < endl ;
delete [ ] result ;
delete [ ] result ;