예제 #1
0
void QeFindPopularPasswords(LPCWSTR lpw, size_t n, std::vector<TqePatInsts>& vPatterns)
{
	std::vector<WCHAR> vLower(n);
	std::vector<WCHAR> vLeet(n);
	for(size_t i = 0; i < n; ++i)
	{
		const WCHAR ch = lpw[i];

		vLower[i] = towlower(ch);
		vLeet[i] = towlower(QeDecodeLeetChar(ch));
	}

	const size_t nMaxLen = min(n, CPopularPasswords::GetMaxLength());
	for(size_t nSubLen = nMaxLen; nSubLen >= 3; --nSubLen)
	{
		if(!CPopularPasswords::ContainsLength(nSubLen)) continue;

		std::vector<WCHAR> vSub(nSubLen);

		for(size_t i = 0; i <= (n - nSubLen); ++i)
		{
			if(QeVectorContains(vLower, L'\0', i, nSubLen)) continue;

			memcpy(&vSub[0], &vLower[i], nSubLen * sizeof(WCHAR));
			if(!QeEvalAddPopularPasswordPattern(vPatterns, lpw, i, vSub, 0.0))
			{
				memcpy(&vSub[0], &vLeet[i], nSubLen * sizeof(WCHAR));
				if(QeEvalAddPopularPasswordPattern(vPatterns, lpw, i, vSub, 1.5))
					memset(&vLower[i], 0, nSubLen * sizeof(WCHAR));
			}
			else memset(&vLower[i], 0, nSubLen * sizeof(WCHAR));
		}
	}
}
예제 #2
0
int main(void)
{
	XVECTOR	vLower(2);
	XVECTOR	vUpper(2);
	XVECTOR	vThreshold(2);
	XVECTOR	vExpected(2);
	XVECTOR	vResult(2);

	vExpected.Set(0,0.75);
	vExpected.Set(1,0.6);

	vLower.Set(0,0.0);
	vLower.Set(1,0.0);

	vUpper.Set(0,1.0);
	vUpper.Set(1,0.75);

	vThreshold.Set(0,0.0001);
	vThreshold.Set(1,0.0001);


	xPerform_Fit_Bound_Simplex(vLower,vUpper,vThreshold,Test_Function,vResult,&vExpected,"xfit.cache");
	printf("\n");
	vResult.Print();

}