Early access
This commit is contained in:
4
DergunPiotr-WaskoDominik/projekt/Makefile
Normal file
4
DergunPiotr-WaskoDominik/projekt/Makefile
Normal file
@@ -0,0 +1,4 @@
|
||||
sha1breaker: sha1breaker.cpp
|
||||
mpicxx -Wall -o breaker sha1breaker.cpp genSha1.cpp
|
||||
clean:
|
||||
rm -rf breaker
|
||||
@@ -1,59 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
const int lexSize = 64; //rozmiar musi być potęgą liczby 2!!!!
|
||||
|
||||
|
||||
char lex[64] = {'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','_',' ','-','!',};
|
||||
|
||||
*/
|
||||
|
||||
const int lexSize = 4;
|
||||
|
||||
char lex[4] = {'a','b','c','d'};
|
||||
|
||||
|
||||
|
||||
int main(){
|
||||
|
||||
unsigned int strSize =2,offset;
|
||||
uint64_t i,temp,maxKomb,mask;
|
||||
|
||||
offset = 2; // [6] ile bitów potrzeba do zapisania liczby lexSize-1 np lexSize=4 to wtedy offset = 2;
|
||||
mask = 0x3; // [0x3f] np dla maxKomb zapisanego na 64bitach to jest 58 zer i 6 (czyli offset) jedynek: 0000000 0000000 0000000 0000000 0000000 0000000 0000000 00111111
|
||||
maxKomb = pow(lexSize,strSize); //maksymalna ilosć komvinacji hasła = lexSize ^ strSize;
|
||||
i = 0;
|
||||
|
||||
char *str;
|
||||
str = new char[strSize];
|
||||
|
||||
|
||||
while(i<maxKomb){
|
||||
temp = i;
|
||||
for(int j=0;j<strSize;j++){
|
||||
temp = temp >> (offset*j);
|
||||
str[j] = lex[temp & mask];
|
||||
}
|
||||
printf("%s\n",str);
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
85
DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp
Normal file
85
DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp
Normal file
@@ -0,0 +1,85 @@
|
||||
#include <mpi.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
#include "genSha1.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 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] << " <hash>" << endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
MPI_Init(NULL, NULL);
|
||||
|
||||
int size,rank,strSize;
|
||||
|
||||
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];
|
||||
|
||||
|
||||
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)
|
||||
i = rank;
|
||||
|
||||
while(i<maxKomb){//generowanie różnych haseł
|
||||
for(int j=0;j<strSize;j++){
|
||||
str[j] = lex[(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!!!"<<endl;
|
||||
for(int l=0;l<strSize;l++) cout<<str[l];
|
||||
cout<<endl;
|
||||
MPI_Abort(MPI_COMM_WORLD,-1); //kończe wszystkie watki; działa ale to mało elegancka metoda
|
||||
}
|
||||
|
||||
i+=size;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
delete[] result; //gdy bedzie wywołane MPI_Abort to i tak to nie zdziała, no ale jest...
|
||||
delete[] str;
|
||||
|
||||
|
||||
MPI_Finalize();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user