亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? crackengine.cpp

?? 彩虹表 crack-hash 破解密碼 。。。。。
?? CPP
字號:
/*
   RainbowCrack - a general propose implementation of Philippe Oechslin's faster time-memory trade-off technique.

   Copyright (C) Zhu Shuanglei <shuanglei@hotmail.com>
*/

#ifdef _WIN32
	#pragma warning(disable : 4786)
#endif

#include "CrackEngine.h"

#include <time.h>

CCrackEngine::CCrackEngine()
{
	ResetStatistics();
}

CCrackEngine::~CCrackEngine()
{
}

//////////////////////////////////////////////////////////////////////

void CCrackEngine::ResetStatistics()
{
	m_fTotalDiskAccessTime               = 0.0f;
	m_fTotalCryptanalysisTime            = 0.0f;
	m_nTotalChainWalkStep                = 0;
	m_nTotalFalseAlarm                   = 0;
	m_nTotalChainWalkStepDueToFalseAlarm = 0;
}

int CCrackEngine::BinarySearch(RainbowChain* pChain, int nRainbowChainCount, uint64 nIndex)
{
	int nLow = 0;
	int nHigh = nRainbowChainCount - 1;
	while (nLow <= nHigh)
	{
		int nMid = (nLow + nHigh) / 2;
		if (nIndex == pChain[nMid].nIndexE)
			return nMid;
		else if (nIndex < pChain[nMid].nIndexE)
			nHigh = nMid - 1;
		else
			nLow = nMid + 1;
	}

	return -1;
}

void CCrackEngine::GetChainIndexRangeWithSameEndpoint(RainbowChain* pChain,
													  int nRainbowChainCount,
													  int nMatchingIndexE,
													  int& nMatchingIndexEFrom,
													  int& nMatchingIndexETo)
{
	nMatchingIndexEFrom = nMatchingIndexE;
	nMatchingIndexETo   = nMatchingIndexE;
	while (nMatchingIndexEFrom > 0)
	{
		if (pChain[nMatchingIndexEFrom - 1].nIndexE == pChain[nMatchingIndexE].nIndexE)
			nMatchingIndexEFrom--;
		else
			break;
	}
	while (nMatchingIndexETo < nRainbowChainCount - 1)
	{
		if (pChain[nMatchingIndexETo + 1].nIndexE == pChain[nMatchingIndexE].nIndexE)
			nMatchingIndexETo++;
		else
			break;
	}
}

bool CCrackEngine::CheckAlarm(RainbowChain* pChain, int nGuessedPos, unsigned char* pHash, CHashSet& hs)
{
	CChainWalkContext cwc;
	cwc.SetIndex(pChain->nIndexS);
	int nPos;
	for (nPos = 0; nPos < nGuessedPos; nPos++)
	{
		cwc.IndexToPlain();
		cwc.PlainToHash();
		cwc.HashToIndex(nPos);
	}
	cwc.IndexToPlain();
	cwc.PlainToHash();
	if (cwc.CheckHash(pHash))
	{
		printf("plaintext of %s is %s\n", cwc.GetHash().c_str(), cwc.GetPlain().c_str());
		hs.SetPlain(cwc.GetHash(), cwc.GetPlain(), cwc.GetBinary());
		return true;
	}

	return false;
}

void CCrackEngine::SearchTableChunk(RainbowChain* pChain, int nRainbowChainLen, int nRainbowChainCount, CHashSet& hs)
{
	vector<string> vHash;
	hs.GetLeftHashWithLen(vHash, CChainWalkContext::GetHashLen());
	printf("searching for %d hash%s...\n", vHash.size(),
										   vHash.size() > 1 ? "es" : "");

	int nChainWalkStep = 0;
	int nFalseAlarm = 0;
	int nChainWalkStepDueToFalseAlarm = 0;

	int nHashIndex;
	for (nHashIndex = 0; nHashIndex < vHash.size(); nHashIndex++)
	{
		unsigned char TargetHash[MAX_HASH_LEN];
		int nHashLen;
		ParseHash(vHash[nHashIndex], TargetHash, nHashLen);
		if (nHashLen != CChainWalkContext::GetHashLen())
			printf("debug: nHashLen mismatch\n");

		// Rqeuest ChainWalk
		bool fNewlyGenerated;
		uint64* pStartPosIndexE = m_cws.RequestWalk(TargetHash,
													nHashLen,
													CChainWalkContext::GetHashRoutineName(),
													CChainWalkContext::GetPlainCharsetName(),
													CChainWalkContext::GetPlainLenMin(),
													CChainWalkContext::GetPlainLenMax(),
													CChainWalkContext::GetRainbowTableIndex(),
													nRainbowChainLen,
													fNewlyGenerated);
		//printf("debug: using %s walk for %s\n", fNewlyGenerated ? "newly generated" : "existing",
		//										vHash[nHashIndex].c_str());

		// Walk
		int nPos;
		for (nPos = nRainbowChainLen - 2; nPos >= 0; nPos--)
		{
			if (fNewlyGenerated)
			{
				CChainWalkContext cwc;
				cwc.SetHash(TargetHash);
				cwc.HashToIndex(nPos);
				int i;
				for (i = nPos + 1; i <= nRainbowChainLen - 2; i++)
				{
					cwc.IndexToPlain();
					cwc.PlainToHash();
					cwc.HashToIndex(i);
				}

				pStartPosIndexE[nPos] = cwc.GetIndex();
				nChainWalkStep += nRainbowChainLen - 2 - nPos;
			}
			uint64 nIndexEOfCurPos = pStartPosIndexE[nPos];

			// Search matching nIndexE
			int nMatchingIndexE = BinarySearch(pChain, nRainbowChainCount, nIndexEOfCurPos);
			if (nMatchingIndexE != -1)
			{
				int nMatchingIndexEFrom, nMatchingIndexETo;
				GetChainIndexRangeWithSameEndpoint(pChain, nRainbowChainCount,
												   nMatchingIndexE,
												   nMatchingIndexEFrom, nMatchingIndexETo);
				int i;
				for (i = nMatchingIndexEFrom; i <= nMatchingIndexETo; i++)
				{
					if (CheckAlarm(pChain + i, nPos, TargetHash, hs))
					{
						//printf("debug: discarding walk for %s\n", vHash[nHashIndex].c_str());
						m_cws.DiscardWalk(pStartPosIndexE);
						goto NEXT_HASH;
					}
					else
					{
						nChainWalkStepDueToFalseAlarm += nPos + 1;
						nFalseAlarm++;
					}
				}
			}
		}
NEXT_HASH:;
	}

	//printf("debug: chain walk step: %d\n", nChainWalkStep);
	//printf("debug: false alarm: %d\n", nFalseAlarm);
	//printf("debug: chain walk step due to false alarm: %d\n", nChainWalkStepDueToFalseAlarm);

	m_nTotalChainWalkStep += nChainWalkStep;
	m_nTotalFalseAlarm += nFalseAlarm;
	m_nTotalChainWalkStepDueToFalseAlarm += nChainWalkStepDueToFalseAlarm;
}

void CCrackEngine::SearchRainbowTable(string sPathName, CHashSet& hs)
{
	// FileName
#ifdef _WIN32
	int nIndex = sPathName.find_last_of('\\');
#else
	int nIndex = sPathName.find_last_of('/');
#endif
	string sFileName;
	if (nIndex != -1)
		sFileName = sPathName.substr(nIndex + 1);
	else
		sFileName = sPathName;

	// Info
	printf("%s:\n", sFileName.c_str());

	// Setup
	int nRainbowChainLen, nRainbowChainCount;
	if (!CChainWalkContext::SetupWithPathName(sPathName, nRainbowChainLen, nRainbowChainCount))
		return;

	// Already finished?
	if (!hs.AnyHashLeftWithLen(CChainWalkContext::GetHashLen()))
	{
		printf("this table contains hashes with length %d only\n", CChainWalkContext::GetHashLen());
		return;
	}

	// Open
	FILE* file = fopen(sPathName.c_str(), "rb");
	if (file != NULL)
	{
		// File length check
		unsigned int nFileLen = GetFileLen(file);
		if (nFileLen % 16 != 0 || nRainbowChainCount * 16 != nFileLen)
			printf("file length mismatch\n");
		else
		{
			static CMemoryPool mp;
			unsigned int nAllocatedSize;
			RainbowChain* pChain = (RainbowChain*)mp.Allocate(nFileLen, nAllocatedSize);
			if (pChain != NULL)
			{
				nAllocatedSize = nAllocatedSize / 16 * 16;		// Round to 16-byte boundary

				fseek(file, 0, SEEK_SET);
				bool fVerified = false;
				while (true)	// Chunk read loop
				{
					if (ftell(file) == nFileLen)
						break;

					// Load table chunk
					//printf("reading...\n");
					clock_t t1 = clock();
					unsigned int nDataRead = fread(pChain, 1, nAllocatedSize, file);
					clock_t t2 = clock();
					float fTime = 1.0f * (t2 - t1) / CLOCKS_PER_SEC;
					printf("%u bytes read, disk access time: %.2f s\n", nDataRead, fTime);
					m_fTotalDiskAccessTime += fTime;

					int nRainbowChainCountRead = nDataRead / 16;

					// Verify table chunk
					if (!fVerified)
					{
						printf("verifying the file...\n");

						// Chain length test
						int nIndexToVerify = nRainbowChainCountRead / 2;
						CChainWalkContext cwc;
						cwc.SetIndex(pChain[nIndexToVerify].nIndexS);
						int nPos;
						for (nPos = 0; nPos < nRainbowChainLen - 1; nPos++)
						{
							cwc.IndexToPlain();
							cwc.PlainToHash();
							cwc.HashToIndex(nPos);
						}
						if (cwc.GetIndex() != pChain[nIndexToVerify].nIndexE)
						{
							printf("rainbow chain length verify fail\n");
							break;
						}

						// Chain sort test
						int i;
						for (i = 0; i < nRainbowChainCountRead - 1; i++)
						{
							if (pChain[i].nIndexE > pChain[i + 1].nIndexE)
								break;
						}
						if (i != nRainbowChainCountRead - 1)
						{
							printf("this file is not sorted\n");
							break;
						}

						fVerified = true;
					}

					// Search table chunk
					t1 = clock();
					SearchTableChunk(pChain, nRainbowChainLen, nRainbowChainCountRead, hs);
					t2 = clock();
					fTime = 1.0f * (t2 - t1) / CLOCKS_PER_SEC;
					printf("cryptanalysis time: %.2f s\n", fTime);
					m_fTotalCryptanalysisTime += fTime;

					// Already finished?
					if (!hs.AnyHashLeftWithLen(CChainWalkContext::GetHashLen()))
						break;
				}
			}
			else
				printf("memory allocation fail\n");
		}

		fclose(file);
	}
	else
		printf("can't open file\n");
}

void CCrackEngine::Run(vector<string> vPathName, CHashSet& hs)
{
	// Reset statistics
	ResetStatistics();

	// Sort vPathName (CChainWalkSet need it)
	int i, j;
	for (i = 0; i < vPathName.size() - 1; i++)
		for (j = 0; j < vPathName.size() - i - 1; j++)
		{
			if (vPathName[j] > vPathName[j + 1])
			{
				string sTemp;
				sTemp = vPathName[j];
				vPathName[j] = vPathName[j + 1];
				vPathName[j + 1] = sTemp;
			}
		}

	// Run
	for (i = 0; i < vPathName.size() && hs.AnyhashLeft(); i++)
	{
		SearchRainbowTable(vPathName[i], hs);
		printf("\n");
	}
}

float CCrackEngine::GetStatTotalDiskAccessTime()
{
	return m_fTotalDiskAccessTime;
}

float CCrackEngine::GetStatTotalCryptanalysisTime()
{
	return m_fTotalCryptanalysisTime;
}

int CCrackEngine::GetStatTotalChainWalkStep()
{
	return m_nTotalChainWalkStep;
}

int CCrackEngine::GetStatTotalFalseAlarm()
{
	return m_nTotalFalseAlarm;
}

int CCrackEngine::GetStatTotalChainWalkStepDueToFalseAlarm()
{
	return m_nTotalChainWalkStepDueToFalseAlarm;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品人人做人人综合| 日本伊人午夜精品| 国产精品正在播放| 欧美一卡二卡在线| 日本在线不卡一区| 日韩丝袜美女视频| 美腿丝袜在线亚洲一区| 欧美精品自拍偷拍动漫精品| 亚洲狠狠爱一区二区三区| 色av一区二区| 亚洲成av人片在线观看| 欧美视频你懂的| 日本视频一区二区| 精品国产乱码久久久久久老虎 | 欧美日韩在线精品一区二区三区激情| 国产精品美女久久久久久久久久久| 国产精品88av| 亚洲尤物视频在线| 欧美一区二区在线不卡| 国产尤物一区二区| 亚洲精品欧美综合四区| 欧美精品一二三| 国产美女av一区二区三区| 国产精品热久久久久夜色精品三区 | 麻豆精品一区二区| 久久久久久久久久久久久久久99| 成人午夜看片网址| 日韩中文字幕不卡| 久久久久久夜精品精品免费| 91伊人久久大香线蕉| 天天操天天干天天综合网| 国产亚洲欧美色| 日本乱人伦一区| 国产综合色在线| 同产精品九九九| 国产精品免费av| 欧美xxxx老人做受| 欧美丝袜丝交足nylons图片| 国产成人综合在线播放| 亚洲小说欧美激情另类| 久久久国产精品不卡| 欧美一级艳片视频免费观看| 99国产精品久久久久久久久久久| 国内精品自线一区二区三区视频| 亚洲卡通欧美制服中文| 日本一区二区成人在线| 日韩一区二区三区视频在线 | 91免费版pro下载短视频| 精品亚洲porn| 国产一区二区三区在线观看精品| 三级欧美韩日大片在线看| 亚洲国产精品欧美一二99| 亚洲免费观看高清完整版在线观看| 久久久精品欧美丰满| 国产日韩欧美高清| 久久精品视频网| 久久久噜噜噜久久人人看| 欧美成人一区二区三区在线观看| 欧美videofree性高清杂交| 91精品国产综合久久婷婷香蕉| 日韩一级免费一区| 久久精品无码一区二区三区| 中文字幕日韩一区二区| 久久99国产精品久久| 国产99久久久国产精品 | 亚洲午夜在线视频| 日韩国产欧美在线观看| 国产曰批免费观看久久久| 国产不卡视频在线观看| 色天天综合久久久久综合片| 91精品国模一区二区三区| 国产亚洲欧美激情| 亚洲国产精品久久久久秋霞影院 | 国产精品网站在线观看| 亚洲日本在线天堂| 开心九九激情九九欧美日韩精美视频电影| 秋霞电影网一区二区| 99久久精品国产一区| 欧美日韩一级片网站| 国产免费久久精品| 天天综合天天做天天综合| 成人在线综合网| 欧美挠脚心视频网站| 国产精品久久精品日日| 美女网站在线免费欧美精品| 99国内精品久久| 国产香蕉久久精品综合网| 日韩电影免费在线看| 色综合久久中文字幕综合网| 久久中文字幕电影| 秋霞午夜鲁丝一区二区老狼| 欧美亚日韩国产aⅴ精品中极品| 久久精品这里都是精品| 欧美a级理论片| 欧美福利视频导航| 一区二区欧美在线观看| 欧美日韩国产综合久久| 一区免费观看视频| 成人一道本在线| 国产性色一区二区| 国产suv一区二区三区88区| 精品国产乱码久久久久久蜜臀| 水蜜桃久久夜色精品一区的特点| 欧美四级电影网| 亚洲电影在线播放| 欧美精品久久久久久久久老牛影院| 亚洲国产aⅴ成人精品无吗| 一本色道久久综合狠狠躁的推荐| 1区2区3区精品视频| 欧美午夜精品一区二区蜜桃 | 91精品国产一区二区三区| 婷婷成人激情在线网| 日韩精品一区二区三区四区| 国产在线播放一区三区四| 久久九九久久九九| 91免费版在线| 欧美aaaaaa午夜精品| 欧美激情综合网| 色伊人久久综合中文字幕| 免费在线看一区| 国产精品网站导航| 欧美丰满一区二区免费视频| 欧美日韩一区二区三区四区五区| 免费在线欧美视频| 亚洲国产日韩av| 日韩免费观看2025年上映的电影| 北条麻妃一区二区三区| 免费成人结看片| 亚洲欧洲制服丝袜| 久久精品一级爱片| 欧美麻豆精品久久久久久| 成人黄色电影在线| 精品在线亚洲视频| 日韩国产在线观看| 亚洲午夜精品17c| 国产精品不卡一区| 国产视频一区二区在线观看| 5566中文字幕一区二区电影| 91黄色免费观看| 色综合一个色综合亚洲| 成人高清免费观看| 成人综合婷婷国产精品久久蜜臀| 国内精品视频666| 久久电影国产免费久久电影| 日本aⅴ亚洲精品中文乱码| 国产盗摄一区二区| 美国一区二区三区在线播放| 奇米影视在线99精品| 亚洲国产精品天堂| 亚洲va国产va欧美va观看| 亚洲一二三四区不卡| 亚洲一区二区三区在线| 亚洲五月六月丁香激情| 亚洲国产欧美在线人成| 亚洲成人免费观看| 青草av.久久免费一区| 久久精品噜噜噜成人av农村| 精品一区二区三区免费毛片爱| 久久99精品国产麻豆不卡| 国产精品影视在线观看| 国产激情视频一区二区在线观看 | 蜜桃视频免费观看一区| 青青草97国产精品免费观看| 精品在线播放午夜| 成人黄色综合网站| 色噜噜狠狠一区二区三区果冻| 欧美日韩精品欧美日韩精品一| 欧美一区二区黄| 国产调教视频一区| 婷婷国产v国产偷v亚洲高清| 韩国一区二区在线观看| 色综合久久中文综合久久牛| 欧美日韩亚洲综合在线| 久久嫩草精品久久久精品| 亚洲男女毛片无遮挡| 美腿丝袜亚洲综合| av一区二区不卡| 久久综合狠狠综合久久激情| 精品无码三级在线观看视频| 欧美日韩中文字幕一区| 久久久三级国产网站| 午夜日韩在线电影| 91日韩在线专区| 国产亚洲成aⅴ人片在线观看| 午夜视频一区在线观看| 91免费看视频| 国产精品久久久久久亚洲毛片| 男女激情视频一区| 欧美日韩大陆一区二区| 一区二区三区四区激情| 成人免费视频一区| 久久久99精品免费观看| 国产伦精品一区二区三区视频青涩 | 国产在线精品一区二区夜色| 欧美日韩高清一区二区| 亚洲一区精品在线| 色老汉一区二区三区| 1024成人网| 91国产丝袜在线播放| 中文字幕在线不卡视频|