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

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

?? chainwalkcontext.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 "ChainWalkContext.h"

#include <ctype.h>
#include <openssl/rand.h>
#ifdef _WIN32
	#pragma comment(lib, "libeay32.lib")
#endif

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

string CChainWalkContext::m_sHashRoutineName;
HASHROUTINE CChainWalkContext::m_pHashRoutine;
int CChainWalkContext::m_nHashLen;

unsigned char CChainWalkContext::m_PlainCharset[256];
int CChainWalkContext::m_nPlainCharsetLen;
int CChainWalkContext::m_nPlainLenMin;
int CChainWalkContext::m_nPlainLenMax;
string CChainWalkContext::m_sPlainCharsetName;
string CChainWalkContext::m_sPlainCharsetContent;
uint64 CChainWalkContext::m_nPlainSpaceUpToX[MAX_PLAIN_LEN + 1];
uint64 CChainWalkContext::m_nPlainSpaceTotal;

int CChainWalkContext::m_nRainbowTableIndex;
uint64 CChainWalkContext::m_nReduceOffset;

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

CChainWalkContext::CChainWalkContext()
{
}

CChainWalkContext::~CChainWalkContext()
{
}

bool CChainWalkContext::LoadCharset(string sName)
{
	if (sName == "byte")
	{
		int i;
		for (i = 0x00; i <= 0xff; i++)
			m_PlainCharset[i] = i;
		m_nPlainCharsetLen = 256;
		m_sPlainCharsetName = sName;
		m_sPlainCharsetContent = "0x00, 0x01, ... 0xff";
		return true;
	}

	vector<string> vLine;
	if (ReadLinesFromFile("charset.txt", vLine))
	{
		int i;
		for (i = 0; i < vLine.size(); i++)
		{
			// Filter comment
			if (vLine[i][0] == '#')
				continue;

			vector<string> vPart;
			if (SeperateString(vLine[i], "=", vPart))
			{
				// sCharsetName
				string sCharsetName = TrimString(vPart[0]);
				if (sCharsetName == "")
					continue;

				// sCharsetName charset check
				bool fCharsetNameCheckPass = true;
				int j;
				for (j = 0; j < sCharsetName.size(); j++)
				{
					if (   !isalpha(sCharsetName[j])
						&& !isdigit(sCharsetName[j])
						&& (sCharsetName[j] != '-'))
					{
						fCharsetNameCheckPass = false;
						break;
					}
				}
				if (!fCharsetNameCheckPass)
				{
					printf("invalid charset name %s in charset configuration file\n", sCharsetName.c_str());
					continue;
				}

				// sCharsetContent
				string sCharsetContent = TrimString(vPart[1]);
				if (sCharsetContent == "" || sCharsetContent == "[]")
					continue;
				if (sCharsetContent[0] != '[' || sCharsetContent[sCharsetContent.size() - 1] != ']')
				{
					printf("invalid charset content %s in charset configuration file\n", sCharsetContent.c_str());
					continue;
				}
				sCharsetContent = sCharsetContent.substr(1, sCharsetContent.size() - 2);
				if (sCharsetContent.size() > 256)
				{
					printf("charset content %s too long\n", sCharsetContent.c_str());
					continue;
				}

				//printf("%s = [%s]\n", sCharsetName.c_str(), sCharsetContent.c_str());

				// Is it the wanted charset?
				if (sCharsetName == sName)
				{
					m_nPlainCharsetLen = sCharsetContent.size();
					memcpy(m_PlainCharset, sCharsetContent.c_str(), m_nPlainCharsetLen);
					m_sPlainCharsetName = sCharsetName;
					m_sPlainCharsetContent = sCharsetContent;
					return true;
				}
			}
		}
		printf("charset %s not found in charset.txt\n", sName.c_str());
	}
	else
		printf("can't open charset configuration file\n");

	return false;
}

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

bool CChainWalkContext::SetHashRoutine(string sHashRoutineName)
{
	CHashRoutine hr;
	hr.GetHashRoutine(sHashRoutineName, m_pHashRoutine, m_nHashLen);
	if (m_pHashRoutine != NULL)
	{
		m_sHashRoutineName = sHashRoutineName;
		return true;
	}
	else
		return false;
}

bool CChainWalkContext::SetPlainCharset(string sCharsetName, int nPlainLenMin, int nPlainLenMax)
{
	// m_PlainCharset, m_nPlainCharsetLen, m_sPlainCharsetName, m_sPlainCharsetContent
	if (!LoadCharset(sCharsetName))
		return false;

	// m_nPlainLenMin, m_nPlainLenMax
	if (nPlainLenMin < 1 || nPlainLenMax > MAX_PLAIN_LEN || nPlainLenMin > nPlainLenMax)
	{
		printf("invalid plaintext length range: %d - %d\n", nPlainLenMin, nPlainLenMax);
		return false;
	}
	m_nPlainLenMin = nPlainLenMin;
	m_nPlainLenMax = nPlainLenMax;

	// m_nPlainSpaceUpToX
	m_nPlainSpaceUpToX[0] = 0;
	uint64 nTemp = 1;
	int i;
	for (i = 1; i <= m_nPlainLenMax; i++)
	{
		nTemp *= m_nPlainCharsetLen;
		if (i < m_nPlainLenMin)
			m_nPlainSpaceUpToX[i] = 0;
		else
			m_nPlainSpaceUpToX[i] = m_nPlainSpaceUpToX[i - 1] + nTemp;
	}

	// m_nPlainSpaceTotal
	m_nPlainSpaceTotal = m_nPlainSpaceUpToX[m_nPlainLenMax];

	return true;
}

bool CChainWalkContext::SetRainbowTableIndex(int nRainbowTableIndex)
{
	if (nRainbowTableIndex < 0)
		return false;
	m_nRainbowTableIndex = nRainbowTableIndex;
	m_nReduceOffset = 65536 * nRainbowTableIndex;

	return true;
}

bool CChainWalkContext::SetupWithPathName(string sPathName, int& nRainbowChainLen, int& nRainbowChainCount)
{
	// something like lm_alpha#1-7_0_100x16_test.rt

#ifdef _WIN32
	int nIndex = sPathName.find_last_of('\\');
#else
	int nIndex = sPathName.find_last_of('/');
#endif
	if (nIndex != -1)
		sPathName = sPathName.substr(nIndex + 1);

	if (sPathName.size() < 3)
	{
		printf("%s is not a rainbow table\n", sPathName.c_str());
		return false;
	}
	if (sPathName.substr(sPathName.size() - 3) != ".rt")
	{
		printf("%s is not a rainbow table\n", sPathName.c_str());
		return false;
	}

	// Parse
	vector<string> vPart;
	if (!SeperateString(sPathName, "___x_", vPart))
	{
		printf("filename %s not identified\n", sPathName.c_str());
		return false;
	}

	string sHashRoutineName   = vPart[0];
	int nRainbowTableIndex    = atoi(vPart[2].c_str());

	nRainbowChainLen          = atoi(vPart[3].c_str());
	nRainbowChainCount        = atoi(vPart[4].c_str());

	// Parse charset definition
	string sCharsetDefinition = vPart[1];
	string sCharsetName;
	int nPlainLenMin, nPlainLenMax;
	if (sCharsetDefinition.find('#') == -1)		// For backward compatibility, "#1-7" is implied
	{
		sCharsetName = sCharsetDefinition;
		nPlainLenMin = 1;
		nPlainLenMax = 7;
	}
	else
	{
		vector<string> vCharsetDefinitionPart;
		if (!SeperateString(sCharsetDefinition, "#-", vCharsetDefinitionPart))
		{
			printf("filename %s not identified\n", sPathName.c_str());
			return false;	
		}
		else
		{
			sCharsetName = vCharsetDefinitionPart[0];
			nPlainLenMin = atoi(vCharsetDefinitionPart[1].c_str());
			nPlainLenMax = atoi(vCharsetDefinitionPart[2].c_str());
		}
	}

	// Setup
	if (!SetHashRoutine(sHashRoutineName))
	{
		printf("hash routine %s not supported\n", sHashRoutineName.c_str());
		return false;
	}
	if (!SetPlainCharset(sCharsetName, nPlainLenMin, nPlainLenMax))
		return false;
	if (!SetRainbowTableIndex(nRainbowTableIndex))
	{
		printf("invalid rainbow table index %d\n", nRainbowTableIndex);
		return false;
	}

	return true;
}

string CChainWalkContext::GetHashRoutineName()
{
	return m_sHashRoutineName;
}

int CChainWalkContext::GetHashLen()
{
	return m_nHashLen;
}

string CChainWalkContext::GetPlainCharsetName()
{
	return m_sPlainCharsetName;
}

string CChainWalkContext::GetPlainCharsetContent()
{
	return m_sPlainCharsetContent;
}

int CChainWalkContext::GetPlainLenMin()
{
	return m_nPlainLenMin;
}

int CChainWalkContext::GetPlainLenMax()
{
	return m_nPlainLenMax;
}

uint64 CChainWalkContext::GetPlainSpaceTotal()
{
	return m_nPlainSpaceTotal;
}

int CChainWalkContext::GetRainbowTableIndex()
{
	return m_nRainbowTableIndex;
}

void CChainWalkContext::Dump()
{
	printf("hash routine: %s\n", m_sHashRoutineName.c_str());
	printf("hash length: %d\n", m_nHashLen);

	printf("plain charset: ");
	int i;
	for (i = 0; i < m_nPlainCharsetLen; i++)
	{
		if (isprint(m_PlainCharset[i]))
			printf("%c", m_PlainCharset[i]);
		else
			printf("?");
	}
	printf("\n");

	printf("plain charset in hex: ");
	for (i = 0; i < m_nPlainCharsetLen; i++)
		printf("%02x ", m_PlainCharset[i]);
	printf("\n");

	printf("plain length range: %d - %d\n", m_nPlainLenMin, m_nPlainLenMax);
	printf("plain charset name: %s\n", m_sPlainCharsetName.c_str());
	//printf("plain charset content: %s\n", m_sPlainCharsetContent.c_str());
	//for (i = 0; i <= m_nPlainLenMax; i++)
	//	printf("plain space up to %d: %s\n", i, uint64tostr(m_nPlainSpaceUpToX[i]).c_str());
	printf("plain space total: %s\n", uint64tostr(m_nPlainSpaceTotal).c_str());

	printf("rainbow table index: %d\n", m_nRainbowTableIndex);
	printf("reduce offset: %s\n", uint64tostr(m_nReduceOffset).c_str());
	printf("\n");
}

void CChainWalkContext::GenerateRandomIndex()
{
	RAND_bytes((unsigned char*)&m_nIndex, 8);
	m_nIndex = m_nIndex % m_nPlainSpaceTotal;
}

void CChainWalkContext::SetIndex(uint64 nIndex)
{
	m_nIndex = nIndex;
}

void CChainWalkContext::SetHash(unsigned char* pHash)
{
	memcpy(m_Hash, pHash, m_nHashLen);
}

void CChainWalkContext::IndexToPlain()
{
	int i;
	for (i = m_nPlainLenMax - 1; i >= m_nPlainLenMin - 1; i--)
	{
		if (m_nIndex >= m_nPlainSpaceUpToX[i])
		{
			m_nPlainLen = i + 1;
			break;
		}
	}

	uint64 nIndexOfX = m_nIndex - m_nPlainSpaceUpToX[m_nPlainLen - 1];

	/*
	// Slow version
	for (i = m_nPlainLen - 1; i >= 0; i--)
	{
		m_Plain[i] = m_PlainCharset[nIndexOfX % m_nPlainCharsetLen];
		nIndexOfX /= m_nPlainCharsetLen;
	}
	*/

	// Fast version
	for (i = m_nPlainLen - 1; i >= 0; i--)
	{
#ifdef _WIN32
		if (nIndexOfX < 0x100000000I64)
			break;
#else
		if (nIndexOfX < 0x100000000llu)
			break;
#endif

		m_Plain[i] = m_PlainCharset[nIndexOfX % m_nPlainCharsetLen];
		nIndexOfX /= m_nPlainCharsetLen;
	}
	unsigned int nIndexOfX32 = (unsigned int)nIndexOfX;
	for (; i >= 0; i--)
	{
		//m_Plain[i] = m_PlainCharset[nIndexOfX32 % m_nPlainCharsetLen];
		//nIndexOfX32 /= m_nPlainCharsetLen;

		unsigned int nPlainCharsetLen = m_nPlainCharsetLen;
		unsigned int nTemp;
#ifdef _WIN32
		__asm
		{
			mov eax, nIndexOfX32
			xor edx, edx
			div nPlainCharsetLen
			mov nIndexOfX32, eax
			mov nTemp, edx
		}
#else
		__asm__ __volatile__ (	"mov %2, %%eax;"
								"xor %%edx, %%edx;"
								"divl %3;"
								"mov %%eax, %0;"
								"mov %%edx, %1;"
								: "=m"(nIndexOfX32), "=m"(nTemp)
								: "m"(nIndexOfX32), "m"(nPlainCharsetLen)
								: "%eax", "%edx"
							 );
#endif
		m_Plain[i] = m_PlainCharset[nTemp];
	}
}

void CChainWalkContext::PlainToHash()
{
	m_pHashRoutine(m_Plain, m_nPlainLen, m_Hash);
}

void CChainWalkContext::HashToIndex(int nPos)
{
	m_nIndex = (*(uint64*)m_Hash + m_nReduceOffset + nPos) % m_nPlainSpaceTotal;
}

uint64 CChainWalkContext::GetIndex()
{
	return m_nIndex;
}

string CChainWalkContext::GetPlain()
{
	string sRet;
	int i;
	for (i = 0; i < m_nPlainLen; i++)
	{
		char c = m_Plain[i];
		if (c >= 32 && c <= 126)
			sRet += c;
		else
			sRet += '?';
	}
	
	return sRet;
}

string CChainWalkContext::GetBinary()
{
	return HexToStr(m_Plain, m_nPlainLen);
}

string CChainWalkContext::GetPlainBinary()
{
	string sRet;
	sRet += GetPlain();
	int i;
	for (i = 0; i < m_nPlainLenMax - m_nPlainLen; i++)
		sRet += ' ';

	sRet += "|";

	sRet += GetBinary();
	for (i = 0; i < m_nPlainLenMax - m_nPlainLen; i++)
		sRet += "  ";

	return sRet;
}

string CChainWalkContext::GetHash()
{
	return HexToStr(m_Hash, m_nHashLen);
}

bool CChainWalkContext::CheckHash(unsigned char* pHash)
{
	if (memcmp(m_Hash, pHash, m_nHashLen) == 0)
		return true;

	return false;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美成人一区| voyeur盗摄精品| 日韩欧美中文字幕制服| 日韩精品电影在线| 精品久久久久久久久久久久包黑料 | 国产欧美日韩另类一区| 粉嫩高潮美女一区二区三区| 国产精品免费久久| 色婷婷久久综合| 日韩精品电影一区亚洲| 久久综合国产精品| 91在线视频免费观看| 亚洲一区二区不卡免费| 日韩一区二区精品在线观看| 国产成人三级在线观看| 亚洲精品va在线观看| 日韩欧美123| www.亚洲国产| 日日夜夜精品免费视频| 精品美女一区二区| 日本精品免费观看高清观看| 亚洲高清免费在线| 久久久久久影视| 欧美亚日韩国产aⅴ精品中极品| 麻豆成人久久精品二区三区小说| 国产精品区一区二区三区| 欧美日韩国产一区二区三区地区| 国产一区二区三区久久久| 一区二区三区在线观看欧美| 精品对白一区国产伦| 在线免费视频一区二区| 国产麻豆成人精品| 午夜欧美在线一二页| 国产精品动漫网站| 日韩一级免费一区| 一本久道久久综合中文字幕| 久久精品久久久精品美女| 亚洲在线视频网站| 亚洲国产成人午夜在线一区| 91精品国产一区二区| 91在线国产福利| 国产在线不卡一卡二卡三卡四卡| 婷婷成人激情在线网| 亚洲图片你懂的| 中文字幕欧美国产| 日韩一区二区三区av| 在线观看日产精品| 99re热视频这里只精品| 国产乱子轮精品视频| 天堂久久久久va久久久久| 亚洲欧洲一区二区三区| 岛国av在线一区| 国产日韩欧美精品一区| 正在播放一区二区| 午夜精品一区在线观看| 国产精品久久久久久亚洲毛片| 日韩一级黄色大片| 欧美视频一区二区三区| 91啪亚洲精品| 成人app软件下载大全免费| 国产福利一区二区三区视频| 久久机这里只有精品| 婷婷中文字幕综合| 午夜视频在线观看一区二区| 亚洲精品v日韩精品| 亚洲免费在线观看| 国产精品国产三级国产aⅴ入口 | 51午夜精品国产| 欧美伊人精品成人久久综合97| 91一区二区在线观看| 91视频精品在这里| 韩国欧美国产一区| 99久久国产综合色|国产精品| 日韩成人精品在线观看| 亚洲一级二级三级| 亚洲一区二区三区中文字幕| 亚洲一区二区视频在线| 午夜久久福利影院| 青青草国产成人av片免费| 日韩影院免费视频| 麻豆一区二区三区| 国产一区二区精品在线观看| 国产91精品露脸国语对白| 成人综合在线观看| 91丨porny丨国产| 日本高清不卡视频| 91精品国产免费| 久久只精品国产| 国产精品亲子伦对白| 亚洲视频图片小说| 亚洲国产裸拍裸体视频在线观看乱了| 一区二区免费视频| 日韩福利电影在线观看| 久久99日本精品| 成人a级免费电影| 色综合激情久久| 宅男在线国产精品| 久久久综合激的五月天| 国产精品国产三级国产aⅴ中文| 亚洲欧美激情一区二区| 日韩精品电影在线| 高清国产一区二区三区| 91小视频免费观看| 欧美一区二区播放| 欧美激情在线一区二区| 亚洲国产精品一区二区尤物区| 日韩电影在线一区| 成人性视频免费网站| 欧美人妇做爰xxxⅹ性高电影| 精品免费一区二区三区| 专区另类欧美日韩| 蜜桃一区二区三区四区| 北条麻妃一区二区三区| 欧美疯狂性受xxxxx喷水图片| 久久综合色8888| 亚洲无人区一区| 国产乱码精品一品二品| 欧美日韩一二三| 久久免费精品国产久精品久久久久 | 日韩女优制服丝袜电影| 亚洲欧洲精品一区二区三区| 日韩成人免费看| 91视频com| 久久品道一品道久久精品| 亚洲国产另类精品专区| 成人av免费在线观看| 日韩一区和二区| 亚洲一级二级在线| 9色porny自拍视频一区二区| 日韩一级片在线观看| 亚洲宅男天堂在线观看无病毒| 韩国女主播一区二区三区| 欧美日韩成人综合天天影院| 综合激情成人伊人| 国产超碰在线一区| 日韩三级视频在线观看| 亚洲综合在线电影| 成人在线视频首页| 亚洲精品一区二区三区蜜桃下载| 亚洲在线免费播放| 91丨九色丨黑人外教| 中文字幕+乱码+中文字幕一区| 麻豆精品新av中文字幕| 欧美日韩综合在线免费观看| 中文字幕日韩av资源站| 国产成人精品免费| 精品久久国产97色综合| 日本va欧美va欧美va精品| 欧美人体做爰大胆视频| 亚洲成av人影院| 一本一道久久a久久精品综合蜜臀| 久久久91精品国产一区二区三区| 日本中文字幕一区二区有限公司| 欧美性猛交xxxx乱大交退制版| 亚洲视频网在线直播| 99这里只有精品| 成人欧美一区二区三区黑人麻豆 | 99久久久久久| 国产精品国产三级国产专播品爱网| 国产精品中文字幕欧美| 精品奇米国产一区二区三区| 久久成人av少妇免费| 日韩欧美中文字幕一区| 美日韩一区二区三区| 日韩欧美国产三级电影视频| 麻豆精品新av中文字幕| 精品国产一区二区三区久久影院 | 欧美一区国产二区| 婷婷成人综合网| 欧美一区二区精品| 日本欧洲一区二区| 26uuu精品一区二区三区四区在线| 蜜桃视频一区二区三区| 精品理论电影在线| 国产精品一区二区不卡| 国产精品久久久久一区 | 国产精品亚洲综合一区在线观看| xvideos.蜜桃一区二区| 国产精品456| 国产精品美女久久久久久久久| 97久久人人超碰| 亚洲高清免费在线| 欧美大片在线观看一区| 国产精品亚洲专一区二区三区 | 亚洲综合一区二区精品导航| 欧美色窝79yyyycom| 日本中文字幕一区| 久久久精品综合| 97久久精品人人做人人爽50路 | 欧美成人免费网站| 成人一区二区三区在线观看| 一区二区三区四区在线免费观看| 欧美日韩在线一区二区| 久久激情五月激情| 国产精品久久久久桃色tv| 欧美午夜片在线观看| 久久 天天综合| 亚洲欧美国产毛片在线| 日韩欧美成人一区| 99视频热这里只有精品免费|