📄 lockdlg.cpp
字号:
// LockDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FreeLock.h"
#include "FreeLockDlg.h"
#include "LockDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLockDlg dialog
CLockDlg::CLockDlg(char *cp,CWnd* pParent /*=NULL*/)
: CDialog(CLockDlg::IDD, pParent)
{FilePath=cp;
//{{AFX_DATA_INIT(CLockDlg)
Delete = FALSE;
FileName = _T("");
Key1 = _T("");
Key2 = _T("");
Compress = FALSE;
//}}AFX_DATA_INIT
}
void CLockDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLockDlg)
DDX_Control(pDX, IDC_LOCK, Lock);
DDX_Check(pDX, IDC_DELETE, Delete);
DDX_Text(pDX, IDC_FILE, FileName);
DDX_Text(pDX, IDC_KEY1, Key1);
DDV_MaxChars(pDX, Key1, 20);
DDX_Text(pDX, IDC_KEY2, Key2);
DDV_MaxChars(pDX, Key2, 20);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLockDlg, CDialog)
//{{AFX_MSG_MAP(CLockDlg)
ON_BN_CLICKED(IDC_ABOUT, OnAbout)
ON_BN_CLICKED(IDC_LOCK, OnLock)
ON_EN_CHANGE(IDC_KEY1, OnChangeKey1)
ON_EN_CHANGE(IDC_KEY2, OnChangeKey2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLockDlg message handlers
void CLockDlg::OnAbout()
{
CFreeLockDlg dlg;
dlg.DoModal();
}
BOOL CLockDlg::OnInitDialog()
{
SetWindowText("文件加密");
CDialog::OnInitDialog();
File.SetFilePath(FilePath);
FileName=File.GetFileName();
Delete=TRUE;
UpdateData(FALSE);
return TRUE;
}
void CLockDlg::OnLock()
{
int i=0;
char NewName[MAX_PATH];
unsigned char Buffer[BUFFER_SIZE];
UpdateData(TRUE);
OnCancel();
CString Extension=FileName;
while(FileName[i]&&FileName[i]!='.')
{
NewName[i]=FileName[i];
i++;
}
NewName[i]='\0';
strcat(NewName,".lck");
Extension.Delete(0,i);
Extension.MakeLower();
char TempPath[MAX_PATH];
GetTempPath(MAX_PATH,TempPath);
strcat(TempPath,NewName);
if(Extension==".lck")
{
if(AfxMessageBox("文件["+FileName+"]可能已经被加密,是否继续?",MB_YESNO|MB_ICONEXCLAMATION,0)==IDNO)
return;
}
CFile Output(TempPath,CFile::modeCreate|CFile::modeWrite);
File.Open(FilePath,CFile::modeRead);
unsigned char Length=FileName.GetLength();
Output.Write(&Length,sizeof(unsigned char));
Output.Write(FileName,Length);
srand((unsigned)time(NULL));
Length=Key1.GetLength();
unsigned char Index[20];
unsigned char *Key=(unsigned char *)LPCTSTR(Key1);
for(i=0;i<Length;i++)
Index[i]=i;
for(i=0;i<Length;i++)
{
int m=rand()*Length/RAND_MAX;
if(m==i)
continue;
int j=Index[m];
char ch=Key[m];
Index[m]=Index[i];
Key[m]=Key[i];
Index[i]=j;
Key[i]=ch;
}
unsigned char LengthData=Length^131;
Output.Write(&LengthData,sizeof(unsigned char));
unsigned char BlueJoe[10]="白乔 浪浪";
unsigned char ch,*cp1=(unsigned char *)LPCTSTR(Key2),*cp2=BlueJoe;
for(i=0;i<Length;i++)
{
ch=Key[i]^(*cp2);
cp2++;
if(!*cp2)
cp2=BlueJoe;
Output.Write(&ch,sizeof(unsigned char));
ch=Index[i]^131;
Output.Write(&ch,sizeof(unsigned char));
}
cp2=BlueJoe;
while(1)
{int Size=File.Read(Buffer,BUFFER_SIZE);
if(!Size)
break;
unsigned char *cp=Buffer;
i=0;
while(i<Size)
{*cp=(*cp)^(*cp1)^(*cp2);
cp++;
cp1++;
cp2++;
i++;
if(!*cp1)
cp1=(unsigned char *)LPCTSTR(Key2);
if(!*cp2)
cp2=BlueJoe;
}
Output.Write(Buffer,Size);
if(Size<BUFFER_SIZE)
break;
}
Output.Close();
File.Close();
if(Delete)
File.Remove(FileName);
if(File.Open(NewName,CFile::modeRead))
{
File.Close();
File.Remove(NewName);
}
Output.Rename(TempPath,NewName);
}
void CLockDlg::OnChangeKey1()
{Check();
}
void CLockDlg::OnChangeKey2()
{Check();
}
void CLockDlg::Check()
{UpdateData(TRUE);
if(Key1.GetLength()&&(Key1==Key2))
{Lock.EnableWindow(TRUE);
}
else
{Lock.EnableWindow(FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -