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

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

?? crackengine.cpp

?? Rainbow加密算法的Crack程序
?? 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一区二区三区免费野_久草精品视频
免费成人你懂的| 丁香亚洲综合激情啪啪综合| 蜜桃91丨九色丨蝌蚪91桃色| 国产aⅴ综合色| 欧美日韩国产高清一区二区三区| 久久综合丝袜日本网| 亚洲国产成人av好男人在线观看| 国产成人精品综合在线观看 | 欧美激情一区二区三区四区| 亚洲一区二区三区视频在线播放| 国产一区二区调教| 91精品欧美一区二区三区综合在| 国产精品久久久久久久午夜片| 日韩av一区二区在线影视| 91在线porny国产在线看| 久久久蜜臀国产一区二区| 日本美女视频一区二区| 欧美在线色视频| 亚洲视频一区二区免费在线观看| 国产一区二区剧情av在线| 欧美一区午夜视频在线观看| 亚洲国产精品久久久久秋霞影院 | 久久精品99久久久| 精品视频全国免费看| 亚洲美女偷拍久久| 成人妖精视频yjsp地址| 国产日韩精品一区| 国产精品中文欧美| 久久综合九色综合97婷婷| 蜜桃视频在线观看一区二区| 欧美顶级少妇做爰| 天堂久久一区二区三区| 欧美午夜电影网| 亚洲成人av免费| 欧美日韩国产高清一区二区| 午夜精品福利一区二区蜜股av| 欧洲精品一区二区| 亚洲成人中文在线| 欧美日韩精品欧美日韩精品| 香蕉加勒比综合久久| 欧美三电影在线| 午夜a成v人精品| 亚洲国产精品一区二区久久 | 韩国中文字幕2020精品| 欧美人与禽zozo性伦| 亚洲小少妇裸体bbw| 欧美日韩国产精品自在自线| 人人精品人人爱| 久久亚洲免费视频| 成人激情黄色小说| 亚洲精品高清视频在线观看| 欧美放荡的少妇| 国产尤物一区二区| 最新欧美精品一区二区三区| 日韩成人av影视| 日韩欧美国产小视频| 国产aⅴ综合色| 亚洲精品老司机| 日韩欧美电影一区| 成熟亚洲日本毛茸茸凸凹| 亚洲伦理在线免费看| 欧美久久久一区| 国产传媒久久文化传媒| 亚洲欧美激情插 | 国产综合久久久久久鬼色| 国产欧美精品一区aⅴ影院| 色噜噜狠狠色综合欧洲selulu| 午夜激情综合网| 久久午夜电影网| 一本久久a久久精品亚洲| 日韩成人免费电影| 中文字幕不卡一区| 91精品国产黑色紧身裤美女| 国产v综合v亚洲欧| 日韩国产高清影视| 国产女同互慰高潮91漫画| 9191久久久久久久久久久| 国产98色在线|日韩| 首页综合国产亚洲丝袜| 成人免费在线观看入口| 日韩免费观看2025年上映的电影| 成人精品国产福利| 捆绑变态av一区二区三区| 亚洲欧美一区二区不卡| 精品国产伦一区二区三区免费| 色拍拍在线精品视频8848| 狠狠色丁香婷婷综合| 亚洲成人精品影院| 亚洲私人黄色宅男| 国产日韩欧美精品综合| 日韩一级大片在线| 欧美午夜精品一区二区蜜桃| 国产丶欧美丶日本不卡视频| 免费高清视频精品| 亚洲成人自拍网| 亚洲自拍与偷拍| 国产精品天天看| 久久久久久久久99精品| 日韩视频一区二区三区| 欧美三区免费完整视频在线观看| 不卡av电影在线播放| 国产精品88av| 麻豆国产91在线播放| 亚洲1区2区3区4区| 亚洲第一主播视频| 亚洲永久免费av| 亚洲蜜桃精久久久久久久| 亚洲欧美在线视频观看| 国产精品毛片久久久久久| 国产免费成人在线视频| 国产网站一区二区三区| 久久久久久久电影| xnxx国产精品| 精品乱人伦小说| 日韩一级二级三级| 欧美v国产在线一区二区三区| 欧美一区二区大片| 日韩欧美亚洲国产另类| 精品美女一区二区三区| 日韩午夜在线播放| 久久综合五月天婷婷伊人| 26uuu久久综合| 久久九九99视频| 亚洲精品成人在线| 久久久久国产精品麻豆ai换脸| 日韩一级黄色片| 精品国产91九色蝌蚪| 久久综合久久99| 亚洲国产高清在线| 亚洲欧美日本在线| 天天操天天干天天综合网| 奇米综合一区二区三区精品视频 | 91福利国产成人精品照片| 色狠狠桃花综合| 欧美精品在欧美一区二区少妇| 91精品国产综合久久福利| 精品人伦一区二区色婷婷| 欧美va在线播放| 精品国产sm最大网站免费看| 久久久久久久电影| 一区二区三区在线影院| 亚洲午夜视频在线观看| 日本伊人色综合网| 国产精品91一区二区| 在线观看亚洲成人| 欧美精品一区二区三区高清aⅴ | 精品国产百合女同互慰| 国产精品不卡在线观看| 午夜成人免费视频| 国产福利91精品一区| 欧美综合在线视频| 精品国精品国产| 亚洲私人黄色宅男| 精品亚洲国内自在自线福利| 成人美女视频在线观看| 欧美午夜精品理论片a级按摩| 精品欧美一区二区三区精品久久| 欧美国产在线观看| 三级一区在线视频先锋| 成人亚洲一区二区一| 在线不卡中文字幕播放| 国产精品九色蝌蚪自拍| 久久精品国产一区二区三区免费看| 成人免费黄色大片| 91精品国产aⅴ一区二区| 国产精品色噜噜| 久久精品国产999大香线蕉| 在线观看不卡一区| 国产精品天天看| 精品一区二区在线看| 欧美日韩国产精品自在自线| 国产精品久久久久久妇女6080| 捆绑紧缚一区二区三区视频| 欧美影院一区二区三区| 欧美高清一级片在线观看| 久久99精品国产91久久来源| 欧美日韩国产大片| 亚洲精品伦理在线| 成人少妇影院yyyy| 久久精品免视看| 久热成人在线视频| 欧美精品777| 亚洲最新视频在线播放| 99久久精品国产一区| 久久女同精品一区二区| 日韩高清不卡一区二区| 欧美三级一区二区| 一区二区三区在线免费| 不卡av免费在线观看| 中文字幕不卡的av| 国产成人激情av| 久久久久99精品一区| 男女男精品视频| 欧美一区日韩一区| 日韩av中文字幕一区二区三区| 丝袜a∨在线一区二区三区不卡| 一级女性全黄久久生活片免费| 成熟亚洲日本毛茸茸凸凹| 精品剧情在线观看| 美女免费视频一区二区|