📄 ecfiledlg.cpp
字号:
// ECFileDlg.cpp : implementation file
//
#include "stdafx.h"
#include "LCDemo.h"
#include "ECFileDlg.h"
// CECFileDlg dialog
IMPLEMENT_DYNAMIC(CECFileDlg, CDialog)
CECFileDlg::CECFileDlg(CWnd* pParent /*=NULL*/)
: CDialog(CECFileDlg::IDD, pParent)
, m_path(_T(""))
, m_pass(_T(""))
{
}
CECFileDlg::~CECFileDlg()
{
}
void CECFileDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_PASSWORD, m_path);
DDX_Text(pDX, IDC_PASS1, m_pass);
}
BEGIN_MESSAGE_MAP(CECFileDlg, CDialog)
ON_BN_CLICKED(IDC_EXIT, &CECFileDlg::OnBnClickedExit)
ON_BN_CLICKED(IDC_D, &CECFileDlg::OnBnClickedD)
ON_BN_CLICKED(IDC_E, &CECFileDlg::OnBnClickedE)
ON_BN_CLICKED(IDC_BROW, &CECFileDlg::OnBnClickedBrow)
ON_EN_CHANGE(IDC_PASSWORD, &CECFileDlg::OnEnChangePassword)
END_MESSAGE_MAP()
// CECFileDlg message handlers
void CECFileDlg::OnBnClickedD()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_path == _T(""))
{
AfxMessageBox(_T("未选择已加密的文件,无法解密!"));
return;
}
UpdateData(TRUE);
if(m_pass == _T(""))
{
AfxMessageBox(_T("密码不能为空!"));
return;
}
if(dcfile(m_path))
{
MessageBox(_T("解密成功"));
}
else
{
MessageBox(_T("解密失败"));
}
}
void CECFileDlg::OnBnClickedE()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_path == "")
{
AfxMessageBox(_T("未选择要加密的文件,无法加密!"));
return;
}
UpdateData(TRUE);
if(m_pass == _T(""))
{
AfxMessageBox(_T("密码不能为空!"));
return;
}
if(ecfile(m_path))
{
MessageBox(_T("加密成功"));
}
else
{
MessageBox(_T("加密失败"));
}
}
void CECFileDlg::OnBnClickedExit()
{
// TODO: Add your control notification handler code here
}
void CECFileDlg::OnBnClickedBrow()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE);
if(dlg.DoModal() == IDOK)
{
m_path = dlg.GetPathName();
UpdateData(FALSE);
}
else
{
return;
}
}
void CECFileDlg::OnEnChangePassword()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
//给文件加密的函数
BOOL CECFileDlg::ecfile(LPCTSTR fpath)
{
char *data;
CFile *file;
DWORD flen;
m_password = epass();
file = new CFile;
if ( !file->Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))
{
return FALSE;
}
flen = file->GetLength();
data = new char[(int)flen];
file->SeekToBegin();
file->Read(data, flen);
for(int i=0; i<(int)flen; i++)
{
data[i] ^= m_password;
data[i] ^= flen;
}
file->SeekToBegin();
file->Write(data, flen);
delete[] data;
//添加密码验证信息
char cpass[5] = "love";
for(int j=0; j<5; j++)
{
cpass[j] ^= m_password;
}
file->SeekToEnd();
file->Write(&cpass, 5);
file->Close();
delete file;
return TRUE;
}
//给文件解密的函数
BOOL CECFileDlg::dcfile(LPCTSTR fpath)
{
char *data;
CFile *file;
DWORD flen;
char love[5];
file = new CFile;
if( !file->Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))
{
return FALSE;
}
flen = file->GetLength();
data = new char[(int)flen];
//检验密码是不是正确
file->Seek(-5, CFile::end);
file->Read(&love, 5);
m_password = epass();
for(int i=0; i<5; i++)
{
love[i] ^= m_password;
}
if(strcmp(love, "love")!=0)
{
return FALSE;
}
//解密
file->SeekToBegin();
file->Read(data, flen);
for(int j=0; j<(int)flen; j++)
{
data[j] ^= m_password;
data[j] ^= (flen-5);
}
file->SeekToBegin();
file->Write(data, flen);
file->SetLength(flen-5);
file->Close();
delete[] data;
delete file;
return TRUE;
}
//获得密码的函数
__int64 CECFileDlg::epass()
{
DWORD plen;
TCHAR *ppass;
__int64 mc= 8757735233305;
UpdateData(TRUE);
ppass = m_pass.GetBuffer(0);
plen = _tcslen(ppass);
for(int i=0; i<(int)plen; i++)
{
mc ^= ppass[i]|128;
}
return mc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -