📄 filedigestdlg.cpp
字号:
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 + -