⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filedigestdlg.cpp

📁 实现多种加解密算法
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 48, szHexDigest);
				iLength = 32;
				break;

			case SHA512:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 64, szHexDigest);
				iLength = 32;
				break;
		}
		poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITHEX1));
		poEdit->SetWindowText(szHexDigest);
		//Find out if any 0-es and replace them with 0x0A or any non graphic char
		for(int i=0; i<iLength; i++)
			if(0 == acDigest[i])
				acDigest[i] = 0x0A;	
		poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITSTR1));
		poEdit->SetWindowText(acDigest);
	}
	catch(exception const& roException)
	{
		MessageBox(CString(roException.what()), g_oStrError, MB_OK|MB_ICONERROR);
		ErrorBeep();
		return;
	}
}

void CFileDigestDlg::OnBtnload() 
{
	//TRUE - File Open
    CFileDialog oFileOpen(TRUE);
    oFileOpen.m_ofn.lpstrTitle = _T("Open Digest File");
    oFileOpen.m_ofn.lpstrFilter = _T("File (*.FDG)\0*.FDG\0(*.*)\0*.*\0\0");
	if(IDOK == oFileOpen.DoModal())
	{
		CString oStrFileName = oFileOpen.GetPathName();
		CFile oFile;
		CFileException oFileException;
		BOOL bOpen = oFile.Open(oStrFileName, CFile::modeRead | CFile::typeBinary, &oFileException); 
		if(TRUE == bOpen)
		{
			//File was opened
			DWORD dwFileLength = oFile.GetLength();
			if((dwFileLength!=16)&&(dwFileLength!=20)&&(dwFileLength!=32)
				&&(dwFileLength!=48)&&(dwFileLength!=64))
			{
				//Cannot be a MD5 File
				MessageBox(_T("FileDigest ERROR: File ") + oStrFileName + _T(" Cannot be a FileDigest File!"), g_oStrError, MB_OK|MB_ICONINFORMATION);
				ErrorBeep();
				return;
			}
			char acDigest[65];
			oFile.Read(acDigest, dwFileLength);
			acDigest[dwFileLength] = 0;
			char szHexDigest[129];
			Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), dwFileLength, szHexDigest);
			CEdit* poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITHEX1));
			poEdit->SetWindowText(szHexDigest);
			//Find out if any 0-es and replace them with 0x0A or any non graphic char
			for(int i=0; i<dwFileLength; i++)
				if(0 == acDigest[i])
					acDigest[i] = 0x0A;	
			poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITSTR1));
			poEdit->SetWindowText(acDigest);
			oFile.Close();
		}
	}
}

void CFileDigestDlg::OnBtnsaveas() 
{
	//FALSE - File Save As
    CFileDialog oFileOpen(FALSE);
    oFileOpen.m_ofn.lpstrTitle = _T("Save Digest File");
    oFileOpen.m_ofn.lpstrFilter = _T("Digest File (*.FDG)\0*.FDG\0(*.*)\0*.*\0\0");
	if(IDOK == oFileOpen.DoModal())
	{
		CString oStrFileName = oFileOpen.GetPathName();
		CFile oFile;
		CFileException oFileException;
		//Check the extension
		TCHAR szBuff[MAX_PATH+1];
		_tcscpy(szBuff, LPCTSTR(oStrFileName));
		char* pcExt = ::PathFindExtension(szBuff);
		BOOL bOpen = oFile.Open(oStrFileName, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary, &oFileException);
		if(TRUE == bOpen)
		{
			//File was opened
			char acDigest[65] = {0};
			CEdit* poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITHEX1));
			CString oStrHex;
			poEdit->GetWindowText(oStrHex);
			int iLength;
			switch(m_iMethod)
			{
				case MD128:
				case RIPEMD128:
					iLength = 16;
					break;
			
				case RIPEMD160:
				case SHA160:
					iLength = 20;
					break;
				
				case SHA256:
					iLength = 32;
					break;

				case SHA384:
					iLength = 48;
					break;

				case SHA512:
					iLength = 64;
					break;

				default:
					ASSERT(0);
			}
			Hex2Binary(LPCTSTR(oStrHex), reinterpret_cast<unsigned char*>(acDigest), iLength);
			oFile.Write(acDigest, iLength);
			oFile.Close();
			MessageBox(_T("FileDigest: File ") + oStrFileName + _T(" Successfully Saved!"), g_oStrSuccess, MB_OK|MB_ICONINFORMATION);
		}
		else
		{
			MessageBox(_T("Cannot Create File ") + oStrFileName + _T(" !"), g_oStrError, MB_OK|MB_ICONERROR);
		}
	}
}

void CFileDigestDlg::OnBtncheck() 
{
	CEdit* poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITFILE));
	CString oStrFile;
	poEdit->GetWindowText(oStrFile);
	try
	{
		//Start the Hourglass cursor
		CWaitCursor oWaitCursor;
		IMessageDigest* poMessageDigest;
		switch(m_iMethod)
		{
			case MD128:
				poMessageDigest = &m_oMD128;
				break;

			case RIPEMD128:
				poMessageDigest = &m_oRIPEMD128;
				break;
			
			case RIPEMD160:
				poMessageDigest = &m_oRIPEMD160;
				break;
			
			case SHA160:
				poMessageDigest = &m_oSHA160;
				break;
				
			case SHA256:
				poMessageDigest = &m_oSHA256;
				break;

			case SHA384:
				poMessageDigest = &m_oSHA384;
				break;
				
			case SHA512:
				poMessageDigest = &m_oSHA512;
				break;
		}
		char acDigest[65] = {0};
		poMessageDigest->DigestFile(LPCTSTR(oStrFile), acDigest);
		char szHexDigest[129] = {0};
		switch(m_iMethod)
		{
			case MD128:
			case RIPEMD128:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 16, szHexDigest);
				break;
			
			case RIPEMD160:
			case SHA160:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 20, szHexDigest);
				break;
				
			case SHA256:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 32, szHexDigest);
				break;

			case SHA384:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 48, szHexDigest);
				break;

			case SHA512:
				Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 64, szHexDigest);
				break;
		}
		CString oStrHex;
		poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITHEX1));
		poEdit->GetWindowText(oStrHex);
		if(CString(szHexDigest) == oStrHex)
		{
			MessageBox(_T("FileDigest: Check Operation SUCCEEDED!"), g_oStrSuccess, MB_OK|MB_ICONINFORMATION);
		}
		else
		{
			MessageBox(_T("FileDigest: Check Operation FAILED!"), g_oStrFailure, MB_OK|MB_ICONINFORMATION);
		}
	}
	catch(exception const& roException)
	{
		MessageBox(CString(roException.what()), g_oStrError, MB_OK|MB_ICONERROR);
		ErrorBeep();
		return;
	}	
}

void CFileDigestDlg::OnRadalpha() 
{
	m_oEditAlpha.EnableWindow(TRUE);
	m_oEditAlpha.SetBkColor(m_oPlainBg);
	m_oEditHex.EnableWindow(FALSE);
	m_oEditHex.SetBkColor(m_oPlainBg1);
}

void CFileDigestDlg::OnRadhex() 
{
	m_oEditHex.EnableWindow(TRUE);
	m_oEditHex.SetBkColor(m_oPlainBg);
	m_oEditAlpha.EnableWindow(FALSE);
	m_oEditAlpha.SetBkColor(m_oPlainBg1);
}

void CFileDigestDlg::OnBtnstringdigest() 
{
	CEdit* poEdit;
	CButton* poButton = reinterpret_cast<CButton*>(GetDlgItem(IDC_RADALPHA));
	IMessageDigest* poMessageDigest;
	switch(m_iMethod)
	{
		case MD128:
			poMessageDigest = &m_oMD128;
			break;

		case RIPEMD128:
			poMessageDigest = &m_oRIPEMD128;
			break;
			
		case RIPEMD160:
			poMessageDigest = &m_oRIPEMD160;
			break;
			
		case SHA160:
			poMessageDigest = &m_oSHA160;
			break;
				
		case SHA256:
			poMessageDigest = &m_oSHA256;
			break;

		case SHA384:
			poMessageDigest = &m_oSHA384;
			break;
				
		case SHA512:
			poMessageDigest = &m_oSHA512;
			break;
	}
	int iLen;
	char acDigest[65] = {0};
	CString oStr;
	if(1==poButton->GetCheck())
	{
		poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITALPHA));
		poEdit->GetWindowText(oStr);
		poMessageDigest->Reset();
		poMessageDigest->AddData(LPCTSTR(oStr), oStr.GetLength());
		poMessageDigest->FinalDigest(acDigest);
	}
	else
	{
		poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITHEX));
		poEdit->GetWindowText(oStr);
		iLen = oStr.GetLength()/2;
		char* pcData = static_cast<char*>(_alloca(iLen));
		Hex2Binary(LPCTSTR(oStr), reinterpret_cast<unsigned char*>(pcData), iLen);
		poMessageDigest->Reset();
		poMessageDigest->AddData(pcData, iLen);
		poMessageDigest->FinalDigest(acDigest);
	}
	//Display the result
	char acHex[129] = {0};
	poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITHEX2));
	int iLength;
	switch(m_iMethod)
	{
		case MD128:
		case RIPEMD128:
			Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 16, acHex);
			iLength = 16;
			break;
		
		case RIPEMD160:
		case SHA160:
			Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 20, acHex);
			iLength = 20;
			break;
			
		case SHA256:
			Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 32, acHex);
			iLength = 32;
			break;

		case SHA384:
			Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 48, acHex);
			iLength = 20;
			break;
			
		case SHA512:
			Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 64, acHex);
			iLength = 32;
			break;
	}
	poEdit->SetWindowText(acHex);
	poEdit = static_cast<CEdit*>(GetDlgItem(IDC_EDITSTR2));
	//Find out if any 0-es and replace them with 0x0A or any non graphic char
	for(int i=0; i<iLength; i++)
		if(0 == acDigest[i])
			acDigest[i] = 0x0A;
	poEdit->SetWindowText(acDigest);
}

BOOL CFileDigestDlg::PreTranslateMessage(MSG* pMsg) 
{
	//Relay events to the ToolTip Control
	m_oToolTipCtrl.RelayEvent(pMsg);
	return CDialog::PreTranslateMessage(pMsg);
}

void CFileDigestDlg::OnSelchangeCombomethods() 
{
	CComboBox* poComboBox;
	poComboBox = static_cast<CComboBox*>(GetDlgItem(IDC_COMBOMETHODS));
	int iSel = poComboBox->GetCurSel();
	ASSERT((iSel>=MD128)&&(iSel<=SHA512));
	m_iMethod = iSel;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -