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

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

?? rainbowtablesort.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>
*/

#include "Public.h"

#define ASSUMED_MIN_MEMORY 32 * 1024 * 1024

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

/*
int QuickSortCompare(const void* pElem1, const void* pElem2)
{
	uint64 n1 = ((RainbowChain*)pElem1)->nIndexE;
	uint64 n2 = ((RainbowChain*)pElem2)->nIndexE;

	if (n1 < n2)
		return -1;
	else if (n1 == n2)
		return 0;
	else
		return 1;
}

void QuickSort(RainbowChain* pChain, int nRainbowChainCount)
{
	qsort(pChain, nRainbowChainCount, 16, QuickSortCompare);	// so slow!
}
*/

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

int QuickSortPartition(RainbowChain* pChain, int nLow, int nHigh)
{
	int nRandomIndex = nLow + ((unsigned int)rand() * (RAND_MAX + 1) + (unsigned int)rand()) % (nHigh - nLow + 1);
	RainbowChain TempChain;
	TempChain = pChain[nLow];
	pChain[nLow] = pChain[nRandomIndex];
	pChain[nRandomIndex] = TempChain;

	TempChain = pChain[nLow];
	uint64 nPivotKey = pChain[nLow].nIndexE;
	while (nLow < nHigh)
	{
		while (nLow < nHigh && pChain[nHigh].nIndexE >= nPivotKey)
			nHigh--;
		pChain[nLow] = pChain[nHigh];
		while (nLow < nHigh && pChain[nLow].nIndexE <= nPivotKey)
			nLow++;
		pChain[nHigh] = pChain[nLow];
	}
	pChain[nLow] = TempChain;
	return nLow;
}

void QuickSort(RainbowChain* pChain, int nLow, int nHigh)
{
	if (nLow < nHigh)
	{
		int nPivotLoc = QuickSortPartition(pChain, nLow, nHigh);
		QuickSort(pChain, nLow, nPivotLoc - 1);
		QuickSort(pChain, nPivotLoc + 1, nHigh);
	}
}

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

#define SORTED_SEGMENT_MAX_CHAIN_IN_MEMORY 1024

class CSortedSegment
{
public:
	CSortedSegment(FILE* file, unsigned int nFileChainOffset, int nFileChainCount)
	{
		m_nChainCount     = 0;
		m_nNextChainIndex = 0;
	
		m_file             = file;
		m_nFileChainOffset = nFileChainOffset;
		m_nFileChainCount  = nFileChainCount;
	}

private:
	RainbowChain m_Chain[SORTED_SEGMENT_MAX_CHAIN_IN_MEMORY];
	int m_nChainCount;
	int m_nNextChainIndex;

	FILE* m_file;
	unsigned int m_nFileChainOffset;
	int m_nFileChainCount;

public:
	RainbowChain* GetNextChain()	// Don't call this if no chain left
	{
		if (m_nChainCount == m_nNextChainIndex)
		{
			int nChainCountToRead;
			if (m_nFileChainCount < SORTED_SEGMENT_MAX_CHAIN_IN_MEMORY)
				nChainCountToRead = m_nFileChainCount;
			else
				nChainCountToRead = SORTED_SEGMENT_MAX_CHAIN_IN_MEMORY;

			//printf("reading... (offset = %u, chain count = %d)\n", m_nFileChainOffset, nChainCountToRead);
			fseek(m_file, m_nFileChainOffset, SEEK_SET);
			fread(m_Chain, 1, sizeof(RainbowChain) * nChainCountToRead, m_file);
			m_nChainCount       = nChainCountToRead;
			m_nNextChainIndex   = 0;
			m_nFileChainOffset += sizeof(RainbowChain) * nChainCountToRead;
			m_nFileChainCount  -= nChainCountToRead;
		}

		return &m_Chain[m_nNextChainIndex];
	}

	bool RemoveTopChain()	// return whether already empty
	{
		m_nNextChainIndex++;

		if (m_nChainCount == m_nNextChainIndex)
			if (m_nFileChainCount == 0)
				return true;

		return false;
	}
};

FILE* CreateTemporaryFile(string sPathName, unsigned int nLen)
{
	FILE* tempfile = fopen(sPathName.c_str(), "w+b");
	if (tempfile == NULL)
	{
		printf("can't create temporary file %s\n", sPathName.c_str());
		return NULL;
	}

	// Set proper length - this is not a good method
	fseek(tempfile, nLen - 4, SEEK_SET);
	int x;
	fwrite(&x, 1, 4, tempfile);
	if (GetFileLen(tempfile) != nLen)
	{
		printf("not enough temporary disk space, %u bytes required\n", nLen);
		fclose(tempfile);
		remove(sPathName.c_str());
		return NULL;
	}

	return tempfile;
}

bool PrepareSortedSegment(list<CSortedSegment>& lSS, FILE* file, FILE* tempfile)
{
	unsigned int nAvailPhys = GetAvailPhysMemorySize();
	if (nAvailPhys < ASSUMED_MIN_MEMORY)
		nAvailPhys = ASSUMED_MIN_MEMORY;
	nAvailPhys = nAvailPhys / 16 * 16;

	// Allocate memory
	unsigned char* pMem = new unsigned char[nAvailPhys];
	if (pMem == NULL)
	{
		printf("memory allocation fail\n");
		return false;
	}

	// Run
	unsigned int nFileLen = GetFileLen(file);
	fseek(file, 0, SEEK_SET);
	fseek(tempfile, 0, SEEK_SET);
	int i;
	for (i = 0; ; i++)
	{
		if (ftell(file) == nFileLen)
			break;

		printf("reading segment #%d...\n", i);
		unsigned int nRead = fread(pMem, 1, nAvailPhys, file);

		printf("sorting segment #%d...\n", i);
		QuickSort((RainbowChain*)pMem, 0, nRead / 16 - 1);

		CSortedSegment ss(tempfile, ftell(tempfile), nRead / 16);
		lSS.push_back(ss);

		printf("writing sorted segment #%d...\n", i);
		fwrite(pMem, 1, nRead, tempfile);
	}

	// Free memory
	delete pMem;

	return true;
}

void MergeSortedSegment(list<CSortedSegment>& lSS, FILE* file)
{
	printf("merging sorted segments...\n");

	fseek(file, 0, SEEK_SET);
	while (!lSS.empty())
	{
		list<CSortedSegment>::iterator MinIt;
		uint64 nMinIndexE;
		list<CSortedSegment>::iterator it;
		for (it = lSS.begin(); it != lSS.end(); it++)
		{
			if (it == lSS.begin())
			{
				MinIt = it;
				nMinIndexE = ((*it).GetNextChain())->nIndexE;
			}
			else
			{
				if (((*it).GetNextChain())->nIndexE < nMinIndexE)
				{
					MinIt = it;
					nMinIndexE = ((*it).GetNextChain())->nIndexE;
				}
			}
		}

		fwrite((*MinIt).GetNextChain(), 1, 16, file);

		if ((*MinIt).RemoveTopChain())
			lSS.erase(MinIt);
	}
}

void ExternalSort(FILE* file, string sTemporaryFilePathName)
{
	FILE* tempfile = CreateTemporaryFile(sTemporaryFilePathName, GetFileLen(file));
	if (tempfile != NULL)
	{
		list<CSortedSegment> lSS;
		if (PrepareSortedSegment(lSS, file, tempfile))
			MergeSortedSegment(lSS, file);
		fclose(tempfile);
		remove(sTemporaryFilePathName.c_str());
	}
}

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

int main(int argc, char* argv[])
{
	if (argc != 2)
	{
		Logo();

		printf("usage: rtsort rainbow_table_pathname\n");
		return 0;
	}
	string sPathName = argv[1];

	// Open file
	FILE* file = fopen(sPathName.c_str(), "r+b");
	if (file == NULL)
	{
		printf("failed to open %s\n", sPathName.c_str());
		return 0;
	}

	// Sort
	unsigned int nFileLen = GetFileLen(file);
	if (nFileLen % 16 != 0)
		printf("rainbow table size check fail\n");
	else
	{
		// Available physical memory
		unsigned int nAvailPhys = GetAvailPhysMemorySize();
		printf("available physical memory: %u bytes\n", nAvailPhys);

		// QuickSort or ExternalSort
		if (nAvailPhys >= nFileLen || nFileLen <= ASSUMED_MIN_MEMORY)
		{
			int nRainbowChainCount = nFileLen / 16;
			RainbowChain* pChain = (RainbowChain*)new unsigned char[nFileLen];
			if (pChain != NULL)
			{
				// Load file
				printf("loading rainbow table...\n");
				fseek(file, 0, SEEK_SET);
				if (fread(pChain, 1, nFileLen, file) != nFileLen)
				{
					printf("disk read fail\n");
					goto ABORT;
				}

				// Sort file
				printf("sorting rainbow table...\n");
				QuickSort(pChain, 0, nRainbowChainCount - 1);

				// Write file
				printf("writing sorted rainbow table...\n");
				fseek(file, 0, SEEK_SET);
				fwrite(pChain, 1, nFileLen, file);

				delete[] pChain;
			}
			else
				printf("memory allocation fail\n");
		}
		else
		{
			// External sort when memory is low
			ExternalSort(file, sPathName + ".tmp");
		}
	}
ABORT:

	// Close file
	fclose(file);

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区影院| 日韩精品成人一区二区三区| 亚洲色图欧洲色图婷婷| 亚洲午夜在线电影| 国产麻豆视频一区二区| 色综合天天综合狠狠| 日韩午夜在线观看视频| 亚洲欧美影音先锋| 久草精品在线观看| 欧美影视一区二区三区| 久久精品人人做人人综合| 亚洲午夜一区二区三区| 波多野结衣91| 欧美精品一区二区三区一线天视频 | 国产亚洲精品免费| 午夜国产精品影院在线观看| 成人av在线资源网| 精品福利在线导航| 视频一区在线播放| 91色视频在线| 欧美极品另类videosde| 婷婷综合在线观看| 日本精品视频一区二区三区| 亚洲国产精品黑人久久久| 久久精品国产一区二区| 欧美日韩五月天| 亚洲天堂久久久久久久| 粉嫩高潮美女一区二区三区| 日韩视频一区二区三区在线播放 | 2021中文字幕一区亚洲| 亚洲一区二区三区四区中文字幕| 免费一级片91| 91精品国产综合久久婷婷香蕉| 国产精品18久久久| 欧美一区二区久久| 天天射综合影视| 欧美日韩免费在线视频| 亚洲高清久久久| 色婷婷av一区| 亚洲黄网站在线观看| 91豆麻精品91久久久久久| 国产精品青草久久| 成人sese在线| 国产人伦精品一区二区| 国产在线视频一区二区三区| 精品国产凹凸成av人网站| 狠狠色狠狠色综合系列| xnxx国产精品| 国产成人日日夜夜| 国产日韩欧美综合一区| 国产精品一区2区| 国产午夜精品理论片a级大结局| 韩国成人精品a∨在线观看| 久久综合九色综合97婷婷女人| 久久国产免费看| 精品国产99国产精品| 国产毛片精品视频| 国产精品久久久久婷婷| 99久久婷婷国产综合精品电影| 国产精品久久久久婷婷| 色哟哟日韩精品| 午夜电影久久久| 精品久久久久香蕉网| 国产福利精品导航| 亚洲欧美日韩电影| 91精品黄色片免费大全| 国产精品一区一区| 亚洲免费在线看| 7777精品伊人久久久大香线蕉经典版下载 | 精品国产乱码久久久久久免费 | 国产三区在线成人av| 国产精华液一区二区三区| 久久午夜免费电影| 成人短视频下载| 亚洲国产一区二区三区青草影视| 欧美男生操女生| 狠狠色综合播放一区二区| 国产精品福利电影一区二区三区四区 | 2017欧美狠狠色| av在线不卡网| 天天综合天天综合色| 国产日韩精品一区二区三区在线| 色狠狠色狠狠综合| 国内一区二区在线| 一区二区久久久久| 欧美成人免费网站| 91网站在线观看视频| 久久国产精品第一页| 亚洲乱码国产乱码精品精的特点| 在线播放视频一区| 不卡的av在线| 久久精品国产99国产| 一区二区激情视频| 欧美国产精品一区二区| 日韩精品在线网站| 欧美在线免费观看视频| 成人性色生活片免费看爆迷你毛片| 五月婷婷综合网| 自拍偷拍亚洲欧美日韩| 久久亚区不卡日本| 欧美一级在线视频| 欧洲av在线精品| 成人高清在线视频| 精久久久久久久久久久| 一区二区三区在线视频观看58| www国产精品av| 欧美蜜桃一区二区三区| 色综合天天综合狠狠| 久久久久88色偷偷免费| 色激情天天射综合网| 99麻豆久久久国产精品免费优播| 紧缚奴在线一区二区三区| 五月天激情综合网| 亚洲综合色噜噜狠狠| 国产精品你懂的| 国产视频在线观看一区二区三区| 337p亚洲精品色噜噜狠狠| 色婷婷av久久久久久久| 99免费精品视频| 99久久婷婷国产| 成人av免费在线| 国产成人免费在线视频| 国产乱人伦精品一区二区在线观看| 午夜亚洲国产au精品一区二区| 亚洲精品菠萝久久久久久久| 亚洲人成人一区二区在线观看| 国产欧美精品一区二区色综合朱莉| 日韩精品一区二区三区在线播放 | 国产精品美女一区二区三区| 精品国产一区二区三区不卡| 精品久久久久久综合日本欧美 | 精品美女一区二区三区| 日韩一区二区影院| 日韩欧美精品在线视频| 日韩一区二区精品| 日韩欧美的一区二区| 91精品国产一区二区三区香蕉| 欧美私模裸体表演在线观看| 欧美日韩精品电影| 91精品国产综合久久久蜜臀图片| 欧美精选午夜久久久乱码6080| 欧美性猛交一区二区三区精品| 色噜噜狠狠成人网p站| 欧美三级日韩三级| 欧美一区在线视频| 欧美电视剧免费观看| 欧美精品一区二| 中文字幕成人网| 亚洲精品日产精品乱码不卡| 亚洲国产婷婷综合在线精品| 亚洲va在线va天堂| 久久99精品国产麻豆婷婷 | 亚洲成人精品一区二区| 亚洲电影在线免费观看| 丝袜美腿亚洲色图| 国产一区二区三区蝌蚪| 成人中文字幕电影| 在线亚洲+欧美+日本专区| 欧美日本免费一区二区三区| 欧美mv和日韩mv国产网站| 久久久国产午夜精品| ...xxx性欧美| 亚洲国产精品一区二区www| 美女国产一区二区| 不卡av在线网| 91精品国产一区二区三区| 欧美国产欧美综合| 亚洲一区二区三区四区不卡| 蜜乳av一区二区| 99久久国产综合精品麻豆| 欧美猛男超大videosgay| 精品国产一区二区亚洲人成毛片 | 亚洲综合色噜噜狠狠| 老司机免费视频一区二区三区| 不卡视频在线看| 91精品在线观看入口| 国产欧美一区二区三区沐欲 | 国产夜色精品一区二区av| 亚洲欧美成aⅴ人在线观看| 奇米精品一区二区三区四区| 成人一区二区三区视频在线观看| 欧美日韩在线免费视频| 欧美精彩视频一区二区三区| 亚洲va欧美va天堂v国产综合| 国产91丝袜在线播放| 日韩一区二区免费电影| 亚洲另类春色校园小说| 国产一本一道久久香蕉| 欧美日韩免费不卡视频一区二区三区| 精品av综合导航| 亚洲国产色一区| 波多野结衣在线aⅴ中文字幕不卡| 91精品中文字幕一区二区三区| 综合中文字幕亚洲| 韩国精品一区二区| 日韩小视频在线观看专区| 老汉av免费一区二区三区| 欧美亚洲国产bt| 国产精品狼人久久影院观看方式| 伦理电影国产精品|