//
const int g_nNumberOfThreads = 4;
const int g_nFrom = 8000000;
const int g_nTo = 8999999;
const string g_strCompareWith = "4ac7b1796b90478f2991bb9a7b05d2bf" ;
time_t g_timeElapsed;
// ,
struct THREAD_PARAMS
{
int nFrom;
int nTo;
};
// MD5
BOOL GetMD5Hash( string strIn, string &strHash)
//
DWORD WINAPI _WorkerThread(LPVOID pParams)
{
//
THREAD_PARAMS *pThreadParams = (THREAD_PARAMS*)pParams;
int nFrom = pThreadParams->nFrom;
int nTo = pThreadParams->nTo;
delete pParams;
string strHash;
for ( int i = nFrom; i < nTo; ++i)
{
stringstream stream;
stream << i;
//
GetMD5Hash(stream.str(), strHash);
//
if (strHash == g_strCompareWith)
{
//
cout << "Password is: " << stream.str() << endl;
cout << "Elapsed time: " << time(NULL) - g_timeElapsed << " sec." << endl;
exit(0);
}
// 10000
if ((i % 10000) == 0)
{
cout << "Current password: " << i << " Elapsed time: " << time(NULL) - g_timeElapsed << " sec." << endl;
}
}
return 0;
}
//
void MultiThreadWay()
{
int nDataLength = ( int )(g_nTo - g_nFrom) / g_nNumberOfThreads;
HANDLE *hThreads = new HANDLE[g_nNumberOfThreads];
for ( int i = 0; i < g_nNumberOfThreads; ++i)
{
THREAD_PARAMS *pParams = new THREAD_PARAMS();
pParams->nFrom = g_nFrom + (i * nDataLength);
pParams->nTo = pParams->nFrom + nDataLength;
hThreads[i] = CreateThread(NULL, 0, _WorkerThread, pParams, 0, NULL);
Sleep(100);
}
WaitForMultipleObjects(g_nNumberOfThreads, hThreads, TRUE, INFINITE);
delete [] hThreads;
}
//
int _tmain( int argc, _TCHAR* argv[])
{
g_timeElapsed = time(NULL);
MultiThreadWay();
return 0;
}
* This source code was highlighted with Source Code Highlighter .
//
const int g_nNumberOfThreads = 4;
const int g_nFrom = 8000000;
const int g_nTo = 8999999;
const string g_strCompareWith = "4ac7b1796b90478f2991bb9a7b05d2bf" ;
time_t g_timeElapsed;
// MD5
BOOL GetMD5Hash( string strIn, string &strHash)
int _tmain( int argc, _TCHAR* argv[])
{
g_timeElapsed = time(NULL);
//
omp_set_num_threads(g_nNumberOfThreads);
// , .
// g_nNumberOfThreads .
// .
#pragma omp parallel for
for ( int i = g_nFrom; i < g_nTo; ++i)
{
//
//
string strHash;
stringstream stream;
stream << i;
//
GetMD5Hash(stream.str(), strHash);
//
if (strHash == g_strCompareWith)
{
cout << "Password is: " << stream.str() << endl;
cout << "Elapsed time: " << time(NULL) - g_timeElapsed << " sec." << endl;
exit(0);
}
// 10000
if ((i % 10000) == 0)
{
// .
// , ""
#pragma omp critical
{
cout << "Current password: " << i << " Elapsed time: " << time(NULL) - g_timeElapsed << " sec." << endl;
}
}
}
return 0;
}
* This source code was highlighted with Source Code Highlighter .
Source: https://habr.com/ru/post/71296/
All Articles